递归式的时间复杂度-以快速排序为例

主方法(master method)给出求解以下形式递归式的“食谱”方法

主定理:T[n] = aT[n/b] + f(n)

其中a>=1 and b>1是常量,并且f(n)是一个渐进正函数

考虑以下三种情况:

1. 如果f(n)=O(n^(logb(a) - E))对于某个常量E>0成立,那么T[n]=O(n^(logb(a)))

2. 如果f(n)=O(n^(logb(a))),则T[n]=O(n^(logb(a)) ^ logn)

3. 如果f(n)=O(n^(logb(a) + E))对于某个常量E>0成立,且对常数c<1有足够大的n,有af(n/b)<=cf(n),那么T[n]=O(f[n])

 

以快速排序为例,

在其最佳情况时,每次划分都是平分,划分的时间代价为O(n),故算法运算时间可递归地表示为

T(n) = 2T(n / 2) + O(n)

a = 2, b = 2, f(n) = O(n)

符合主方法的第二种情况,因此时间复杂度为O(nlogn)

 

对Master Method的证明请见算法导论。

转载于:https://www.cnblogs.com/melon-h/archive/2012/09/20/2694560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值