关于代码段的时间复杂度

时间复杂度是衡量一段代码或者一个算法是否优秀的重要标准。

一个语句在这个函数中执行的次数成为语句频度或者时间频度,T(n)。

现有一个辅助函数,f(n),当n为极限值时,T(n)/f(n)为一个不为零的常量,则他俩是同量级函数,T(n)=O(f(n))。这就是时间复杂度。

若算法语句的执行次数为一个常数,那么它的算法复杂度为O(1)。

计算规则:

1、  找到运行次数最多的语句

2、  计算语句执行次数的数量级

3、  用O来表示结果

一个例子:

for (i=1; i<=n; i++)
      x++;

  for (i=1; i<=n; i++)
      for (j=1; j<=n; j++)
          x++;

第一个循环O(n);

第二个循环O(n平方);

总的:O(n平方)。

 

 

另一个例子:

  a=0;
   b=1;                       ①
   for (i=1;i<=n;i++)  ②
   {  
      s=a+b;       ③
      b=a;         ④  
      a=s;         ⑤
   }
解:  语句1的频度:2,        
         语句2的频度:n,        
         语句3的频度:n,        
         语句4的频度:n,    
         语句5的频度:n,                                  
         T(n) = 2+4n
         f(n) = n
         lim(T(n)/f(n)) = 2*(1/n) + 4 = 4
         T(n) = O(n).     

最后一个例子:

i=1;       ①
   while (i<=n)
      i=i*2; ②

1的时间复杂度是O(1)

2的运行次数是log2n

所以总的时间复杂度为O(log2n)。

posted @ 2014-09-16 18:30  周县长  阅读(814)  评论(0)    收藏  举报