关闭

算法导论中间关于递归问题的master method的替代方法

标签: 算法
2229人阅读 评论(1) 收藏 举报
分类:
算法导论中间递归一节中:
关于T(n) = aT(n/b) + f(n), a >= 1, b > 1。
此书的作者提出了一种解法(master method),分情况对于f(n),a,b三个参数对于最后解的影响做了解答。
实际上,个人认为有更好基于代数技巧的的方法。但是并不难于掌握。
 
set n = b^k, S(k) = T(b^k), then we have:  S(k) = a S(k-1) + f(b^k), (1-1)
expand(1-1),then we can see the process below:
S(k) = a(   aS(k-2) + f(b^(k-1)) ) + f(b^k)
       = a^2 S(k-2) + a f(b ^ (k-1)) + f(b^k);
       = ....
       = a^(k-1)S(1) + a^(k-2) f(b^2) +...+a^(k-i) f(b^i) + ... f(b^k);
在最后部分( a^(k-2) f(b^2) +...+a^(k-i) f(b^i) + ... f(b^k))的求和过程中,可以利用已有的数学结果估算出这个数列和的阶,进而估算出递归的时间复杂度。具体方法微积分的教材上基本上都讲的很清楚,对于常见的数列几乎都已经有了定论,基本上都可以用广义积分的方法求出无穷大的阶。
 
数学追求的是简单漂亮, 本来一种方法可以解决的问题,非要搞出许多特殊情况,何苦呢?
 
过一两天,我还会对另外的,例如: T = T(n/3)+T(2n/3) + cn这样的递归做出类似的解答。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:136192次
    • 积分:1903
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:34篇
    • 译文:8篇
    • 评论:33条
    最新评论