【算法导论学习-008】算法时间复杂度的计算

来源:互联网 发布:导出来的sql带双引号 编辑:程序博客网 时间:2024/04/20 03:02
  【算法导论】提供了3种方法来计算算法时间复杂度。
1、主方法(【算法导论】 P94)
QQ图片20140808112517.jpg
2、数学归纳法(mathematical induction,【算法导论】 P83)
    如果不满足主方法(The master throrem)的形式结构,可以用归纳法进行证明。
3、递归树方法(【算法导论】 P88)
  递归树方法基本满足主方法(The master throrem)的结构形式,只是更形象化的理解。
4、例子
1)【算法导论】P59
  递归结构:T(n)=2T(n/2)+n
   QQ图片20140808111843.jpg
     f(n)=n,满足主方法(The master throrem)的第二种情形,所以T(n)=n*lgn
2)【算法导论】P59
  递归结构:T(n)=2T(n/2)+n*lgn
   QQ图片20140808111843.jpg
    f(n)=n*lgn不是多项式意义上的大于n,所以不满足主方法(The master throrem)的第三种情形。
    根据【算法导论】P106 课后题4.6-2的证明题:
   QQ图片20140808112622.jpg

    算法复杂度为:n*(lgn)^2

3)【算法导论】 P87 课后题4.3-1
   递归结构:T(n)=T(n-1)+n,假设复杂度为O(n^2)
则数学归纳法证明:T(n)≤c*(n-1)^2
                      =c*n^2 +(1-2*c)n+c
                      = O(n^2)
*******************************************************************************************************************
练习题
参考:http://see.xidian.edu.cn/cpp/html/2653.html
  • 以下算法的时间复杂度为(D )
 void fun(int n) {  int i=l;  while(i<=n)  i=i*2;  } 
A. O(n)    B. O(n2)    C. O(nlog2n)    D. O(log2n)
  • 设n是描述问题规模的非负整数,下面程序片段的时间复杂度是(A)

x=2; while(x<n/2) x=2*x; 
A. O(log2n)    B. O(n)    C. O(nlog2n)    D. O(n2)


0 0