算法导论-4递归关系

目录

1. 利用数列知识

2. 替换法(代换法)

(1)猜测解-->数学归纳法证明;

(2)变量变换法;

3. 迭代法

(1)展开法;

(2)递归树法;

4. 主定理(主方法求解递推式)

5. 补充:递归与分治法(sch1)

递归设计技术

递归程序的非递归化

算法设计

(1)Fibonacci数

(2)生成全排列

(3)二分查找

(4)大整数乘法

(5)Strassen矩阵乘法

  (6) 导线和开关(略)


 

1. 利用数列知识

  1. 累加法:递推关系式为 a_{n+1}-a_{n}=f(n))采用累加法。
  2. 累乘法:递推关系式为a_{n+1}/a_{n}=f(n)采用累乘法。
  3. 构造法:递推关系式为(1)a_{n+1}=pa_{n}+q,(2)a_{n+1}=pa_{n}+q^{n},都可以通过恒等变形,构造出等差或等比数列,利用等差或等比数列的定义进行解题,其中的构造方法可通过待定系数法来进行。
  4. 和化项法:递推公式为S_{n}=f(n)S_{n}=f(a_{n})一般利用

                                      

     5. 用特征方程求解递推方程(感觉比较生僻,不做解释)

     6. 迭代法:从原始递推方程开始,反复将对于递推方程左边的函数用右边的等式代入,直到得到初值,然后将所得的结果进行化简。

     例如在调用归并排序mergeSort(a,0,n-1)对数组a[0...n−1]排序时,执行时间T(n)的递推关系式为:

                                     

其中,O(n)为merge()所需要的时间,设为cn(c为正常量)。因此:

                               

忽略求解细节。在我们求解递归式时,因为最终是要求得一个时间上限,所以在求解时常常省略一些细节。比如mergeSort(a,0,n-1)运行时间的实际递归式应该是:

                                      

但我们忽略这些上取整、下取整以及边界条件,甚至假设问题规模n=2^{k},这都是为方便求解而忽略的细节。经验和一些定理告诉我们,这些细节不会影响算法时间复杂度的渐近界。

类似的,我们也可以用迭代法求解汉诺塔递归求解时的时间复杂度。但遗憾的是,迭代法一般适用于一阶的递推方程。对于二阶及以上(即T(n)依赖它前面更多个递归项)的递推方程,迭代法将导致迭代后的项太多,从而使得求和公式过于复杂,因此需要将递推方程化简,利用差消法等技巧将高阶递推方程化为一阶递推方程。如在求快速排序算法平均时间复杂度T(n)的递推方程,T(n)依赖T(n−1)、T(n−2)、...、T(1)等所有的项,这样的递推方程也称为全部历史递推方程。(这里省略快速排序算法平均复杂度T(n)的求解过程)

小结:上面6种递推关系是高中、本科知识,在此重点介绍了迭代法,其它几种方法虽未在本篇中使用,但可以加深对递推式求解的认识。

2. 替换法(代换法)

(1)猜测解-->数学归纳法证明;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值