算法复杂度分析
时间复杂度
时间复杂度:用大O来表示,一般的有O(1),O(n),O(logn),O(nlogn),O(n2)
O(1):算法的运行时间不随数据集N的变大而变大
O(n):算法的运行时间跟数据集呈线性增长趋势
O(n2):一般多出现在两层循环中出现
上图程序总时间
当 n 很大时,你可以把它想象成 10000、100000。而公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。我们只需要记录一个最大量级就可以了,如果用大 O 表示法表示刚讲的那两段代码的时间复杂度,就可以记为:T(n) = O(n); T(n) = O(n2)。
unit_time:代码执行的单位时间
复杂度计算法则:
1. 只关注循环执行次数最多的一段代码(高阶部分会真正影响一个算法的时间趋势)
2.加法法则:总复杂度等于量级最大的那段代码的复杂度
3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
O(logn):对数复杂度,例如下面那个程序
其余几个时间和数据集关系图如下:
参考:极客时间《数据结构和算法学习》专栏