算法导论学习笔记-第十五章-动态规划

来源:互联网 发布:网络布线工程报价 拆线 编辑:程序博客网 时间:2024/04/30 18:52

第十五章 动态规划

 

总结:这一章通过装配线调度问题和矩阵链乘法问题引出了动态规划问题,并讨论了最长公共子序列以及最优二叉查找树问题。

 

1.    动态规划基础

动态规划主要用于解决最优化问题,它的步骤:

1)  描述最优解结构

2)  递归定义最优解的值

3)  按自底向上的方式计算最优解的值

4)  由计算出的结果构造一个最优解

 

动态规划的思想就是把问题分成若干个子问题,通过求子问题的最优解,得到问题的最优解,关键就是找到其中的最优子结构。

动态规划算法的运行时间依赖于两个因素的乘积:子问题的总个数、每一个子问题中有多少种选择。

 

是否可以采用动态规划的两个标志:最优子结构、子问题重叠

 

最优子结构:一个问题的最优解包含了子问题的一个最优解。

动态规划以自底向上的方式来利用最优子结构

应用最优子结构的条件:子问题必须是独立的,即一个子问题的解不会影响同一问题的另外一个子问题的解。如果同一问题的子问题不共享资源,则它们就是独立的。

 

重叠子问题:用来解原问题的递归算法可反复地解同样的子问题。

 

做备忘录

动态规划的一种变形,采用了一种自顶向下的策略。维护一个记录了子问题解的表,但有关填表动作的控制结构更像递归算法。

 

动态规划与做备忘录的比较:

如果所有的子问题都至少要被计算一次,则一个自底向上的动态规划算法比一个自顶向下的做备忘录算法好出一个常数因子,因为前者无需递归的代价,而且维护表格的开销也小些;如果子问题空间中的某些子问题根本没有必要求解,做备忘录方法有着只解那些肯定要求解的子问题的优点。

 

原创粉丝点击