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

浙公网安备 33010602011771号