动态规划
2013-02-02 13:17:02 最后更新: 2015-08-06 23:37:40 访问数量:1587
2013-02-02 13:17:02 最后更新: 2015-08-06 23:37:40 访问数量:1587
动态规划算法最大的特性是:局部最优中产生整体最优。具体方法是:逐层迭代,从局部开始,一步一步走到整体。
用动态规划求解最优化问题的第一步是描述最优解的结构,如果问题的一个最优解中包含了子问题的最优解,则该问题具有最优子结构
当一个问题具有最优子结构时,我们才可以在分治法、动态规划、贪心策略等算法中进行选择
在动态规划中,我们利用子问题的最优解来构造问题的一个最优解
寻找最优子结构时,可以遵循一种共同的模式:
动态规划以自底向上的方式来利用最优子结构,也就是说,首先找到子问题的最优解,解决子问题,然后找到问题的一个最优解,寻找问题的最优解需要在子问题中作出选择,即选择将用哪一个来求解问题
适用于动态规划方法求解的问题必须具有的第二个条件就是子问题空间要“很小”,也就是用于解决原问题的递归算法可以反复解决同样的子问题,而不会产生新的子问题,当一个递归算法不断的调用同一问题时,我们就称该问题包含“重叠子问题”,而适用于分治法解决的问题往往在递归的每一步都产生全新的问题。
动态规划总是充分利用重叠子问题,即通过每个子问题只解一次,把结果保存在一个表中,供之后查表,而避免反复进行相同的运算
动态规划有一个变形,他既具有通常的动态规划的效率,又采用了一种自顶向下的策略
其思想是为每一个子问题的解在表中创建一个表项,开始时,每个表项最初都包含一个特殊的值,以表示该表项有待填入,当在递归算法的执行中第一次遇到一个子问题时,就计算他的解并填入表中,以后每次遇到该子问题时只要查看这个表即可
事实上,备忘录方法与动态规划方法的思想是一样的,只是动态规划采用的是自底向上的策略,而备忘录方法则通过递归调用实现自顶向下的策略