常用的时间复杂度比较:(其中O是同阶无穷大的意思)
其实不用刻意去记,直接算就好了,比如O(n)级与O(log2 n)可以通过比较图像看出来,y=x增长明显快于y=log2 x,所以O(n)>O(log2 n),同理:O(n^3) >O(n^3log2 n)
可以通过口诀高效背诵,时间复杂度由小到大:
下面来看看实例:
如果是双层循环嵌套,外层循环执行n次,那么内层循环执行n^2次
时间复杂度T(n)可以表示为O(n^2)+O(n)+C C为常数
顺序执行语句时间复杂度为常数级,可以忽略,
O(n)<O(n^2),n趋于无穷时,只需要考虑更高阶的O(n ^2)
所以T(n)=O(n^2),只用看最深层循环次数就行了(最高阶无穷大)
下面也是类似的计算方法
虽然判定条件为i<=n
但是有i*=2;
可以设循环次数为x
当i=2,x=1
i=2^2,x=2
…
i=2^m,x=m
当2^x>n时,跳出循环
x=log2 n,所以执行了log2 n次
也就是T(n)=O(log2 n),时间复杂度与log2 n同阶
当查找时,我们要分情况判断,比如下面这个算法,要找到一个元素,最好情况和最坏情况相差很大,可能第一个就找到,也可能最后找到。
如果开始就找到则为常数级复杂度,最后找到则要循环n次
如果平均算的话,要找的元素在每个地方概率都为1/n,那么如果在第i个位置则要找i次
计算循环次数=(1+2+3+…+n)* (1/n),也是一个n级复杂度
但我们一般不考虑最好情况,考虑平均时间复杂度和最坏情况时间复杂度比较多,更能防止实际中出现问题