算法导论 系列四:算法设计与分析:动态规划、贪心、平摊分析
动态规划
- 步骤
- 描述最优解的结构
- 递归以求最优解的值
- 自底向上的计算最优解
- 由计算结果构造最优解
- 装配线调度
- 最快路线的结构
![]()
- 一个问题额最优解包含了子问题的一个最优解:即最优子结构
- 递归解
![]()
- 最快路线的结构
- 矩阵链乘
![]()
- 动态规划
- 最优子结构:问题的最优解包含了子问题的最优解,即具有最优子结构
- 剪切发证明子问题的最优解课推导出问题最优解,如果不是子问题最优解,则剪贴子问题最优解
- 重叠子问题:求解原问题过程中多次求解一个子问题,则存在重叠子问题
- 备忘录:遇到的子问题未曾遇到则求解并存储,再次遇到时不必重复计算
![]()
- 最长公共子序列
- 最长公共子序列结构
![]()
- 最长公共子序列结构
- 最优二叉查找树:期望查找代价最小
- 最优二叉查找树必然具有最优子结构
- 求解最优二叉查找树,必然先求自述的最优二叉查找子结构
贪心(最小生成树,单源最短路径)
确定最优子结构,设计递归解,确定最优选择之一是贪心解,证明贪心选择后,只余一个子问题,设计贪心递归,递归算法转为迭代算法
-
贪心要素:贪心选择性质和最优子结构
-
贪心选择性质:全局最优解和通过局部最优(贪心)达到
-
最优子结构:问题的最优解包含了子问题的最优解,即具有最优子结构
-
贪心理论
- 拟阵
![]()
- 拟阵证明:非空子集,遗传性(传递性),交换性
- 拟阵中所有最大独立子集是相同的
- 贪心问题:在加权拟阵中寻找具有最大权值的独立子集
- 拟阵
任务调度
- 惩罚最小的调度安排,使得迟任务惩罚最小即早任务集惩罚最大,即求早任务集最大的安排方案
平摊分析
- 聚集分析:n个操作的全部时间平均到n个操作中去
- 计算多个操作的总代价,然后平均到一次操作
- 记账方法
- 总的平摊代价不能为负,保证平摊代价是总的代价的上界
- 势能方法
![]()
- 动态表
- 表扩张
- 聚集分析
![]()
- 记账方法
![]()
- 聚集分析
- 表扩张










浙公网安备 33010602011771号