1.常见时间复杂度计算举例
实例1
实例1基本操作执行了2N+10次,通过推导大O阶方法知道,时间复杂度为 O(N)
实例2
实例2基本操作执行了M+N次,有两个未知数M和N,时间复杂度为 O(N+M)
实例3
实例3基本操作执行了100次,通过推导大O阶方法,时间复杂度为 O(1)
实例4
实例4基本操作执行最好1次,最坏N次,时间复杂度一般看最坏,时间复杂度为 O(N)
实例5
实例5基本操作执行最好N次,最坏执行了(N*(N+1))/2次,通过推导大O阶方法时间复杂度一般看最坏,时间复杂度为 O(N^2)
实例6
实例6基本操作执行最好1次,最坏O(logN)次,时间复杂度为 O(logN)
ps:logN在算法分析中表示是底数为2,对数为N。有些地方会写成lgN。(建议通过折纸查找的方式讲解logN是怎么计算出来的)
二分查找的时间复杂度为 O(log2n),其中n表示元素的数量
这是因为每次查找都可以将待查找区间缩小一半
所以最坏情况下需要进行的比较次数为 log2n --- O(logN)
实例7
实例7通过计算分析发现基本操作递归了N次,时间复杂度为O(N)
实例8
实例8通过计算分析发现基本操作递归了2^N次,时间复杂度为O(2^N)
(建议画图递归栈帧的二叉树讲解)
2.常见空间复杂度计算举例
实例1
实例1使用了常数个额外空间,所以空间复杂度为 O(1)
实例2
实例2动态开辟了N个空间,空间复杂度为 O(N)
实例3
实例3递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间
空间复杂度为O(N)
3.常见的时间复杂度
一般算法常见的复杂度如下: