算法复杂度分析

时间复杂度

时间复杂度:用大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):对数复杂度,例如下面那个程序

算法复杂度分析

算法复杂度分析

 

其余几个时间和数据集关系图如下:

算法复杂度分析

 

 

 

 

 

参考:极客时间《数据结构和算法学习》专栏