您的位置:首页 > 其它

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

2014-08-08 11:29 375 查看
【算法导论】提供了3种方法来计算算法时间复杂度。

1、主方法(【算法导论】 P94)



2、数学归纳法(mathematical induction,【算法导论】 P83)

如果不满足主方法(The master throrem)的形式结构,可以用归纳法进行证明。

3、递归树方法(【算法导论】 P88)

递归树方法基本满足主方法(The master throrem)的结构形式,只是更形象化的理解。

4、例子

1)【算法导论】P59

递归结构:T(n)=2T(n/2)+n



f(n)=n,满足主方法(The master throrem)的第二种情形,所以T(n)=n*lgn

2)【算法导论】P59

递归结构:T(n)=2T(n/2)+n*lgn



f(n)=n*lgn不是多项式意义上的大于n,所以不满足主方法(The master throrem)的第三种情形。

根据【算法导论】P106 课后题4.6-2的证明题:



算法复杂度为: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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: