首页 > 其他 > 详细

递归式求解

时间:2014-05-07 16:07:35      阅读:425      评论:0      收藏:0      [点我收藏+]

算法设计中经常会用到递归,利用递归式的方法可以清晰地显示算法的整个过程,而对于分析算法的复杂度,解递归式就有了用处,这里的方法来自于《算法导论》。

1. 代换法

代换法只能用于解那种很容易猜的情形,它可用来确定一个递归式的“O”和“Ω”界。

举例,确定递归式 T(n) = 2*T(└n/2┘) + n 的一个“O”界

1.1 先猜测有某个界存在
由于这个递归式与合并排序的计算时间复杂度的递归式很相似,所以我们猜测其解为 T(n) = O( n*log(n) )

1.2 然后用数学归纳法证明该猜测的正确性
要让猜测成立,我们需要证明 T(n) <= c*n*log(n),其中c是某个 >0 的常数。

先假设这个界对└n/2┘成立,即 T(└n/2┘) <= c*└n/2┘*log(└n/2┘)。

对递归式作替换:

T(n) = 2*T(└n/2┘) + n -> T(n) <= 2*(c*└n/2┘*log(└n/2┘)) + n    ->

T(n) <= c*n*log(└n/2┘) + n    ->    T(n) <= c*n*log(n) - c*n*log(2) + n    ->    

T(n) <= c*n*log(n) - c*n + n -> T(n) <= c*n*log(n) +(1-c)*n

只要是c >= 1,有 T(n) <= c*n*log(n),所以就有: T(n) = O( n*log(n) )

接下来应用数学归纳法证明对边界条件也成立
注意对于此递归式,要将n=1的特殊情况,与n=2,3 ...等普遍情况分开。

2、 递归树

参考:http://blog.csdn.net/woniu317/article/details/22145047

               例T(n) = 3T(n/4) + O(n2),其递归树如图3-1所示。图中结点中的数字表示合并问题解的代价,因此该递归式的解为图中所有结点中数字之和。易得该递归树最多有log4n+1层,如图中左侧所示;另外图右侧表明了每层的数字之和,则递归式T(n) = 3T(n/4) + O(n2)的解为T(n) = Ο(n2),详细结算过程如下:

bubuko.com,布布扣

bubuko.com,布布扣

3、 主方法

给出递归形式: T(n) = a * T(n/b) + f(n) 的界,其中a>=1,b>1,f(n)是给定的函数

这种方法要记忆三种情况,做到了这点,就可以很容易地确定很多简单的递归式的界了

bubuko.com,布布扣

递归式求解,布布扣,bubuko.com

递归式求解

原文:http://blog.csdn.net/hustyangju/article/details/25193199

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!