算法导论 第4章 分治策略(2)
代入法求解递归式
代入法求解递归式的步骤:
- 猜测解的形式
- 用数学归纳法求出解中的常数,并证明解正确
如对递归式:
猜测其解为T(n)=O(nlgn),代入法要求证明恰当选择常数c>0,可有T(n)<=cnlgn。假定此上届对所有m < n成立,代入得到:
其中只要c>=1,最后一步即成立。注意到对n=1,边界条件T(1)<=c1lg1=0与T(1)=1矛盾,对于这种情况可以修改归纳证明中的基本情况,换为T(2)或T(3)即可。
递归树方法求解递归式
对于代入法,有时想到一个好的猜测比较困难。在递归树方法中,递归树的每个节点表示一个单一子问题的代价,将树中的代价求和即可得到递归调用的总代价,适合用来生成好的猜测,并用代入法验证。
对于递归式:
构造递归树:
整个递归树共有log4n+1层,其中第i层由3<i个节点,每个节点的代价为c(n/4i)2,所以整棵树代价之和为:
计算过程中利用了一定程度的不精确,推导出一个猜测T(n)=O(n2)。接下来即可利用代入法证明猜测正确:
当d>=(16/13)c时推导成立。
主方法求解递归式
主方法专门用于求解这种形式的递归式:
主定理:令a>=1和b>1是常数,对于定义在非负整数的函数T(n)=aT(n/b)+f(n),T(n)由如下渐近界:
如对于递归式:
a=9,b=3,f(n)=n,nlogba=Θ(n2),有f(n)=O(nlog39-ε),ε=1,对应情况1,得到解T(n)=Θ(n2)。