版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
文章目录
4.0 开头
第一段
- 2.3.1中介绍了归排
- 他用了分治
- 分治策略中:
- 我们递归地求解一个问题
- 每层递归中应用如下三个步骤:
- Divide分解步骤将问题划分为一些子问题
- 子问题形式与原问题一样,只是规模更小
- (conqure)解决步骤递归地求解出子问题。
- 如果子问题足够小,则停止递归,直接求解
- 合并(Combine)将 子问题的解组合成原问题的解
第二段
- 子问题大时,需递归求解,称为递归情况。
- 当子问题变小,不需递归时,说递归已触底,进入基本情况。
- 有时,除了与原问题形式一样的更小的子问题外
- 还需求解与原问题不完全一样的子问题
- 将这些子问题看作合并步骤的一部分
第三段
- 本章中将看到更多基于分治策略的算法。
- 求解最大子数组问题
- 输入一个数值数组
- 需确定具有最大和的连续子数组
- 两个
矩阵乘法的分治算法
- 一个运时 ,不优于平凡算法
- 另一Strassen算法 运时
- 渐进时间复杂性击败平凡算法
递归式
- 递归式与分治方法是紧密相关的
- 使用递归式可以很自然地刻画分治算法的运行时间
- 如2.3.2节,用下面描述MERGE-SORT过程的最坏运行时间为
- 递归式可以有很多形式
- 如可将问题划分为2/3和 1/3
- 如果分解和合并步骤都线性时间
- 则有
- 子问题不必是原问题的一个固定比例。
- 如线性查找的递归版本(练习2. 1-3)仅生成一个子问题,
- 仅比原问题的规模少1
- 每次递归调用将花费常量时间
- 再加上下一层递归调用的时间,
- 递归式为 。
三种求解递归式的方法
-
介绍三种求解递归式方法,即得出算法的“ ”或“ ”渐近界的方法:
-
代入法: 猜一个界,然后用数学归纳法证明这个界正确。
-
递归树法: 将递归式转为棵树,
- 结点表示不同层次的递归调用产生的代价。
- 然后用边界和技术来求解递归式。
-
.主方法: 求下面公式的递归式的界:
- 它刻画了一个分治算法生成
个子问题,
- 子问题都是原问题的 ,
- 分解和合并总共花费时间为f(n)
- 为用主方法,要熟记三情况
- 掌握此法, 确定很多简单递归式的渐近界就很easy。
- 本章用主方法确定
- 最大子数组和矩阵相乘的分治算法的运时
- 书中其他用分治策略也用主方法分析
- 有时也会遇到不等式的递推哦
- 它刻画了一个分治算法生成
个子问题,
递归式技术的细节
- 会略取向下取整,边界条件等