1.三步计算时间复杂度

作者: KaelQ | 来源:发表于2016-07-29 15:13 被阅读4252次

    1 时间复杂度概述

    • 当一个程序产生的时候,就自然而然产生了执行时间,我们不可能每次都去一个一个运行进行比较。于是一种省时省力的方法产生了,这就是时间复杂度的来源。总的来说:

    时间复杂度简化了我们的比较方法。

    2 时间复杂度计算

    • 时间复杂度与执行次数有关。于是流程为:
      1.找出所有语句的频度并组成执行次数T(n)
      2.T(n)的数量级,忽略常量、低次幂和最高次幂的系数,f(n)=T(n)的数量级
      3.T(n)=O(f(n))
      举例:
     int num1, num2;            
     for(int i=0; i<n; i++){ 
         num1 += 1;
         for(int j=1; j<=n; j*=2){ 
            num2 += num1;
         }
     }
    

    1.语句int num1, num2;的频度为1
    语句i=0;的频度为1
    语句i<n; i++; num1+=1; j=1; 的频度为n
    语句j<=n; j=2; num2+=num1;的频度为n*log2(n)*;
    (为什么会出现log2(n)呢?是因为循环x次,j=2^x ,当j=n时停止循环,就是2^x=n则有log2(n)=x时停止 ,即循环次数为log2(n)。)
    **T(n) = 2 + 4n + 3n*log2n
    2.忽略掉T(n)中的常量、低次幂和最高次幂的系数。
    f(n) = n*logn
    3.代入公式
    T(n) =O(f(n))= O(n*logn)

    3.时间复杂度比较

    • 常数阶O(1), 对数阶O(logn), 线性阶O(n), 线性对数阶O(nlogn), 平方阶O(n^2), 立方阶O(n^3),..., k次方阶O(n^k), 指数阶O(2^n) 。

    Ο(1)<Ο(logn)<Ο(n)<Ο(nlogn)<Ο(n2)<Ο(n3)<…<Ο(2^n)和Ο(n!)
    一些大小需要根据问题的规模n来进行判断。

    • Ο(1)表示基本语句的执行次数是一个常数。
    • O(logn)、Ο(n)、Ο(nlog2n)、Ο(n2)和Ο(n3)称为多项式时间。
    • Ο(2n)和Ο(n!)称为指数时间。(它们的大小和n有关。)

    相关文章

      网友评论

      • c168ffb9cc18:为什么会出现log2(n)呢?是因为循环x次,j=2^x ,当j=n时停止循环,就是2^x=n则有log

        j 为啥就等于2^x呢
      • 40a27f48bc84:很容易理解哎~非常不错!
      • a67fe5291a58:很实用,赞

      本文标题:1.三步计算时间复杂度

      本文链接:https://www.haomeiwen.com/subject/cqrzjttx.html