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

原创 2006年05月18日 10:08:00
算法导论中间递归一节中:
关于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这样的递归做出类似的解答。

相关文章推荐

[算法导论] 递归式求解的三种方法

求解递归式,《算法导论》上给出了三种方法,不过对于

MIT:算法导论——2.渐近符号、递归及解法_和连续子数组的最大和、主方法/主定理求时间复杂度

#if 0 三种求解递归式的方法,即算法的O渐近界的方法: (1)代入法:猜测一个界,然后用 数学归纳法证明 这个界正确。 (2)递归树法:将递归式转换为一棵递归树。其结点表示不同层次的递归调用...

【算法导论】最大子数组问题(递归+迭代)

最大子数组问题。首先考虑习题4-15,要求迭代实现,线性复杂度,首先直接上代码:import java.lang.reflect.Array; import java.util.Arrays;publ...

求最大子数组的和,算法导论之分治递归求解,暴力求解,记忆扫描方法。

求最大子数组的和,算法导论只分治递归求解,暴力求解,记忆扫描方法。

算法导论 之 平衡二叉树 - 创建、插入、查询、销毁 - 递归[C语言]

平衡二叉树 C语言实现 创建 插入 查找 销毁

算法导论:堆排序递归实现 (c语言)

我们算法老师让我下节课讲一下堆排序的算法,我就受累写了如下的代码,初学c语言的可以参照着看一下,如果你现在初学c语言,那么恭喜你你学习了一门可以收益终身的语言,c语言学好走遍天下都不怕,这是真的所有的...

算法导论 第三章:渐进符与递归式的求解

递归式的纠结是在第四章讲的,这里提到第三章来和渐渐进符一起简要介绍。 1. 五种渐近符(Asymptotic notation)   2. 三种求解递归式(recurrences)的方法 (1)代入...

算法导论12.2-7.P165另一种非递归的中序遍历二叉树的办法

思路比较简单: 就是先调用minimum找到二叉树中的最小关键字的结点,即二叉树最左边的树叶,然后依然迭代地调用tree_successor寻找前一个结点x的后继:即比x->key大的所有关键字中最...

算法导论12.2-8 二叉搜索树的非递归遍历先驱节点分析

算法导论
  • mistakk
  • mistakk
  • 2015年12月28日 16:17
  • 399

【算法导论】02——渐近符号、递归及解法

渐近符号 1、Θ记号  Θ(g(n)) = { f(n) : 若存在正常数c1,c2和n0,使对所有n>=n0时有0 其效果相当于删除f(n)中的低阶项,并忽略最高阶项的系数。 ...
  • muyimo
  • muyimo
  • 2014年07月27日 22:10
  • 784
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论中间关于递归问题的master method的替代方法
举报原因:
原因补充:

(最多只允许输入30个字)