分析方法:
- 只要关注最大阶级的量级即可。
- 加法法则:总复杂度等于量级最大的那段代码的复杂度
- 乘法法则:嵌套代码复杂度等于嵌套内外代码复杂度的乘积
不同复杂度大小比较:
常见复杂度分析:
1.O(1):
表示复杂为度常量级,并不是执行一行代码。
比如
int j = 8;
int j = 6;
int sum = i + j;
也是O(1)
2.O(logn),O(nlogn)
i = 1;
while (i <= n)
{
i=i*2;
}
这个算法就是2^k=n所以可以得出,所以时间复杂度为。
如果代码修改为
i = 1;
while (i <= n)
{
i=i*3;
}
则为3^k=n得出k=log3n,复杂度为O(log3n).
因为对数之间可以用换底公式相互转化,即即他们之间只有一个常量级,所以他们复杂度都记为O(logn)。
常见O(logn)算法有二分查找
而O(nlogn)就是logn循环执行n遍的结果。
快速排序复杂度最大时间复杂度为O(nlogn)
3.O(m+n)
这种情况下是两个加法块代码但无法判断m和n谁大时使用