递归分治时间复杂度主定理法

记录一下以前博客的证明过程,补充一下之前的结论

在算法导论中lgn一般指2为底的对数n,特此说明


以前写的博客记录了一下分治递归时间复杂度的结论,发现少了一个正则条件,而且也不覆盖所有的一般情况

https://blog.csdn.net/qq_19841133/article/details/103640028
在这里插入图片描述

考虑分支递归时间复杂度T(n),有下面的更一般结论
T(n) = aT(n/b) + f(n)
在这里插入图片描述
像下面举了一个例子T(n),计算发现f(n)较大,同时还要验证正则条件a(f(n/b)) <= cf(n),就是图片The regularity condition部分
在这里插入图片描述
为什么要正则条件?

在递归式T(n) = aT(n/b) + f(n)中

首先, f(n) 可以直观的被解释为把一个规模为n的问题分解成a个规模为n/b的子问题和合并a个子问题的解的代价

其次,af(n/b) 可以被解释为把a个规模为n/b的子问题分解成 a 2 a^2 a2个规模为 n / b 2 n/b^2 n/b2 的子问题和合并 a 2 a^2 a2个子问题解的代价。

那么,条件 af(n/b) ≤ cf(n), for c < 1 和足够大的 n, 可以被解释为上述第一点f(n)合并的代价是上述第二点af(n/b)代价的准确界。

则当一个问题被分解成越来越小的子问题,分解和合并的代价变得越来越小。


例子1
T ( n ) = 5 T ( n / 2 ) + n 2 T(n) = 5T(n/2) + n^2 T(n)=5T(n/2)+n2
这个比较简单,直接套 d < l o g b a d<log_ba d<logba T ( n ) = n l o g 2 5 T(n) = n^{log_25} T(n)=nlog25


例子2
T ( n ) = 27 T ( n / 3 ) + n 3 l g n T(n) = 27T(n/3) + n^3 lg n T(n)=27T(n/3)+n3lgn
对应(2)公式
T ( n ) = ( n 3 l g 2 n ) T(n) = (n^3 lg^2n) T(n)=(n3lg2n)


例子3
T ( n ) = 2 T ( n / 2 ) + n / l g n T(n) = 2T(n/2) + n / lg n T(n)=2T(n/2)+n/lgn
a=2,b=2,f(n)=n/lgn
这里对应(2)公式,但是发现k=-1,不满足k>=0,因此不用主定理法求解


例子4
改变变量法

有时代数操作可以把一个未知的递归式转换成已知可解的递归式

如下Tn,这里b表示不出来,不能用主定理法,但是我们可以替换一下变量
T ( n ) = 2 T ( n ) + l g n T(n) = 2T(\sqrt n) + lg n T(n)=2T(n )+lgn

m = l g n m = lg n m=lgn, 则 n = 2 m n = 2^m n=2m

代回Tn
T ( 2 m ) = 2 T ( 2 m / 2 ) + m T(2^m) = 2T(2^{m/2}) + m T(2m)=2T(2m/2)+m

S ( m ) = T ( 2 m ) S(m)=T(2^m) S(m)=T(2m)得出新的递归式
S(m) = 2S(m/2) + m

用主定理法解得, d = l o g b a d=log_ba d=logba,S(m) = mlgm

用m代回
S ( m ) = T ( 2 m ) = T ( n ) = m l g m = l g n l g l g n S(m) = T(2^m) =T(n)= mlgm = lgnlglgn S(m)=T(2m)=T(n)=mlgm=lgnlglgn


主定理法证明,下面是主定理法一种特殊形式的证明,更一般的情况请查阅《算法导论》

T ( n ) = a T ( n / b ) + c n k T(n) = aT(n/b) + cn^k T(n)=aT(n/b)+cnk

将T(n)递归展开,假设展开了m层变成一个没有递归的完整的求和序列
在这里插入图片描述

令T(1) = c,写成求和公式形式
在这里插入图片描述

那么解决求和部分 ∑ i = 0 m ( b k / a ) i \sum_{i=0}^m(b^k/a)^i i=0m(bk/a)i即可,其实就是等比数列求和,分类讨论三种情况

在这里插入图片描述
等比数列求和r分成大于0等于0小于0情况
在这里插入图片描述
最后结论为
在这里插入图片描述


更一般的情况证明在《算法导论》中,数学分析难度了已经,先放一放先()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值