`
CherryRemind
  • 浏览: 53706 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

算法复杂度

    博客分类:
  • Base
阅读更多
复习下时间复杂度计算
http://blog.csdn.net/zhuchzhi/archive/2007/03/14/1529514.aspx
http://blog.csdn.net/iluna/archive/2009/05/09/4159485.aspx


按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n^2)、立方阶O(n^3)、k次方阶O(n^k)、指数阶O(2^n)。

有如下复杂度关系
c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!
 sum=0;             (一次)
 for(i=1;i<=n;i++)   (n次 )
    for(j=1;j<=n;j++) (n^2次 )
        sum++;       (n^2次 )

解:T(n)=2n^2+n+1 =O(n^2)

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

解:语句1的频度是1,        设语句2的频度是f(n),        则:2^f(n)<=n;f(n)<=log2n   
取最大值f(n)= log2n,则该程序的时间复杂度T(n)=O(log2n )

for(i=0;i<n;i++)
{
  for(j=0;j<i;j++)
  {
    for(k=0;k<j;k++)
      x=x+2;
  }
}

解:当i=m, j=k的时候,内层循环的次数为k
当i=m时, j 可以取 0,1,...,m-1 ,  所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次
所以,i从0取到n, 则循环共进行了: 0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/6
所以时间复杂度为O(n^3).
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics