复杂度分析

进入正题:复杂度分析

    例如:求 1,2,3…n 的累加和

    代码:

 

1      int  count(int n){               
2          int sum = 0;                    //1ms
3          int i = 1;                      //1ms
4          for(; i < n;i++){               //n ms
5            sum   += sum+i;               //n ms
6          } 
7         return sum;                      
8     }

 

        为方便估计,这里假设CPU每行代码执行时间都一样 为1ms  ,总的执行时间为T(n)  , 代码标注时间可获悉:T(n) = 1+1+n+n = 2n+2,

        上点难度:

       

 1   int  count(int n){               
 2         int sum = 0;                       //1ms
 3         int i = 1;                            //1ms
 4         int j = 1//1ms
 5          for(; i < n;i++){               //n ms
 6              j = 1;                           //n  ms
 7            for(;j<n;j++){                //n ms  
 8                 sum = sum + i*j;       //n  ms
 9              }
10          }               
11   }

     这段代码总执行时间::T(n) = 1+1+1+2n  + 2n^2  = 2n^2+2n+3  ,

     可见,似乎T(n)  和 每行代码执行次数n  成正相关关系(书面语称n叫规模),那好像存在着量级(阶)的关系,于是乎,大笔一挥,

以为老人大胆的画了个圈(O),从此诞生了时间复杂度的表示法:

所以,第一个例子中的 T(n) = O(2n+2),第二个例子 的T(n) = O(2n^2+2n+3)  。

当 n 很大时,抓大放小,于是最终 :T(n) = O(n); T(n) = O(n2)  就是时间复杂度表示法

哎???  有没有发现 大O表示法取决于循环次数最多的代码。。于是我们得到启发或者技巧:

在分析一个算法、一段代码的时间复杂度的时候,也只关注循环执行次数最多的那段代码就行。

 

二、常见时间复杂度量级:

 那么他们在代码中如何体现的,且看下文。。。

 

  

    

   

posted on 2019-05-21 23:58  小金人儿  阅读(52)  评论(0)    收藏  举报