本节主要解说的是算法的复杂度。
算法性能
算法的性能分为三种:
-
最佳情况:计算时间最短的情况
-
最差情况:计算时间最长的情况
-
平均情况:随机输入的期望开销
以二分查找为例
最佳情况是1,由于第一次就有可能找到须要找的整数。
最差情况是logN
平均情况是logN
算法复杂度
算法复杂度用于定义问题的难度,另外也有助于开发最优化的算法,算法复杂度能够通过分析最坏情况来降低输入数据对算法性能的影响。
为了简化问题难度的表示方法,算法复杂度降低了算法分析的细节,忽略常数系数。
最优算法
所谓的最佳算法就是在不论什么情况下都能保证执行时间在理论范围内,并且没有更好的算法可以超越。
算法复杂度表示方法
常见的表示方法有比方O(N^2)表示算法最大可能的复杂度,Ω(N^2)表示最小可能的复杂度,Θ(N^2)表示算法复杂度的增长情况。
举例
问题描写叙述:推断一个数组中有多少个0。
以暴力方法为例。
这个问题中性能上限就是指某个特定的算法能实现的复杂度。
算法下限就是经过数学方法的证明,最优算法的复杂度是Ω(N)。由于数组中每一个元素都有可能是0,必需要循环整个数组才干得出结果。
最优算法:这个问题中暴力算法就是最优算法,所以最优算法的复杂度为Θ(N^2)。
算法的开发步骤
-
开发一个算法
-
证明最低下限
假设开发出的算法复杂度和证明得出的最低复杂度不相符的话,能够去寻找新的算法。也有可能是证明出错,当然证明出错的情况是比較少见的。
1970年代是算法设计的黄金年代。
误区
关于算法复杂度有下面误区:
-
太在乎最坏情况。事实上实际应用中最坏情况基本上不会出现。
-
试图通过提高复杂度的常数系数来提高性能。
-
将大O当成近似复杂度,事实上真正的近似复杂度称之为波浪记法。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119119.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...