暑假训练Day4

时间复杂度

分析方法:

  • 只要关注最大阶级的量级即可。
  • 加法法则:总复杂度等于量级最大的那段代码的复杂度
  • 乘法法则:嵌套代码复杂度等于嵌套内外代码复杂度的乘积

不同复杂度大小比较:
\(O(1)<O(logn)<O(n)<O(nlogn)<O(nlogn)<O(n^k)<O(x^n)<O(n!)\)

常见复杂度分析:

  1. \(O(1)\):
    表示复杂为度常量级,并不是执行一行代码。
    比如
int j = 8;
int j = 6;
int sum = i + j;

也是\(O(1)\)

  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谁大时使用

posted @ 2019-07-05 21:11  夜烛灯花  阅读(150)  评论(0)    收藏  举报