时间复杂度分析:
1. 只关注循环执行次数最多的一段代码
2. 加法法则:总复杂度等于量级最大的那段代码的复杂度(总的时间复杂度就等于量级最大的那段代码的时间复杂度)
3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
常见时间复杂度实例分析:
1. O(1)(一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1))
2. O(logn)、O(nlogn)
在采用大 O 标记复杂度的时候,可以忽略系数,即 O(Cf(n)) = O(f(n))
如果一段代码的时间复杂度是 O(logn),我们循环执行 n 遍,时间复杂度就是 O(nlogn) 了。
而且,O(nlogn) 也是一种非常常见的算法时间复杂度。比如,归并排序、快速排序的时间复杂度都是 O(nlogn)
3. O(m+n)、O(m*n)
空间复杂度分析:
常见的空间复杂度就是 O(1)、O(n)、O(n2),像 O(logn)、O(nlogn) 这样的对数阶复杂度平时都用不到
1、最好情况时间复杂度就是,在最理想的情况下,执行这段代码的时间复杂度
2、最坏情况时间复杂度就是,在最糟糕的情况下,执行这段代码的时间复杂度
3、平均情况时间复杂度,代码在所有情况下执行的次数的加权平均值表示
4、均摊时间复杂度,平摊是特殊的平均
1)代码在绝大多数情况下是低级别复杂度,只有极少数情况是高级别复杂度;
2)低级别和高级别复杂度出现具有时序规律。均摊结果一般都等于低级别复杂度。