第四章——分治策略
求解递归式的方法
- 代入法:我们猜测一个界,然后用数学归纳法证明这个界是正确的。
- 递归树法:将递归式转换为一棵树,其结点表示不同层次的递归调用产生的代价。然后采用边界和技术来求解递归式。
- 主方法
最大子数组问题
- 分析:
2. 伪代码:
FIND-MAX-CROSSING-SUBARRAY(A,low,mid,high)
// 求左边的最大子数组
left-sum = -无穷;
sum = 0;
for i = min downto low
sum+=A[i];
if sum > left-sum;
left-sum = sum
max-left = i;
//求右边的最大子数组
right-sum = -无穷
sum = 0
for j = min+1 to high
sum += A[j];
if sum > right-sum
right-sum = sum
max-right = j
return(max-left,max-right,left-sum+right-sum);
3.运行时间的T(n)的递归式:
矩阵乘法的Strassen算法
- 分析
假设矩阵的规模N是2的幂,则可以把nn的矩阵划分为4个n/2n/2的子矩阵,然后再计算矩阵的乘法。 - 伪代码
- Strassen方法
不过多介绍,具体方法在书上p46页。 - 运行时间的T(n)的递归式
普通分治算法:
Strassen算法:
求解递归式的方法
一. 用代入式法求解递归式
步骤:1.猜测解的形式。2.用数学归纳法求出解中的常数,并证明解释正确的。
二.用递归树方法求解递归式
三.用主方法求解递归式
主方法求解递归式形式为 T(n) = aT(n/b) + f(n)
四.证明主定理
本节无需掌握,若需要了解见书p55。