天天看点

Nearth==>算法设计与分析/第三章/动态规划算法(理论)

/*
一:定义
 动态规划算法(我的理解):
 相对于分治测策略来说,都是把一个大问题分解成若干子问题。
 而唯一的不同在于,分治策略算法的所有子问题都有相同的性质以及相同的解决
 方法。动态规划算法的子问题性质都不一样,那么针对每个不同性质的子问题,
 相应的解决方法也不同,所有针对大问题的最终结果来说,它的最优解为这些
 最优子问题的解得合并。
 ******************************************************************
 动态规划算法(官方理解):
 动态规划算法与分治法类似,其基本思想是将待求问题分解成若干子问题,先求解子
 问题,再结合这些子问题的解得到原问题的解。与分治法不同的是,适合用动态
 规划法求解的问题经分解得到的子问题往往不是互相独立的。针对这些子问题,需要
 建立一个表来记录所有已解决的子问题的答案,以后若遇到相同子问题,则查表记录
 结果,避免重复计算,花销太多时间。
 ----------------------------------------------------------------------
二:动态规划算法适用于解最优化问题,它的大致步骤如下
 1->找出最优解的性质,并刻画其结构特征
 2->递归的定义最优值
 3->以自低向上的方式计算最优值
 4->根据计算最优值时得到的信息,构造最优解
 ------------------------------------------------------------------------
三:动态规划算法的基本要素
 针对一个问题,使用动态规划算法来解决问题的基本要素体现在:最优子结构
 和重叠子问题。
 1->最优子结构:
 设计动态规划算法的第一步通常是要刻画最优解的结构。当问题的最优解包含了
 其子问题的最优解时,称该问题具有最优子结构性质。问题的最优子结构性质提
 供了该问题可用动态规划算法求解的重要线索。
 2->重叠子问题:
 可用动态规划算法求解的问题应具备的另一基本要素是子问题的重叠性质。在
 用递归算法自顶向下解此问题时,每次产生的子问题并不总是新问题,有些子
 问题被反复计算。动态规划算法正是利用了这种子问题的重叠性质,对每个子
 问题只解一次,然后将其解保存在一个表格中,当再次需要解此子问题时,只是
 简单地用常数时间查看一下结果。通常,不同的子问题个数随问题的大小呈多项式
 增长。因此,用动态规划算法通常只需要多项式时间,从而获得较高的解题效率。
 ---------------------------------------------------------------------
四:备忘录方法
 备忘录方法是动态规划的变形。与动态规划算法一样,备忘录方法用表格保存
 已解决的子问题的答案,在下次需要解此子问题时,只要简单地查看该子问题
 的解答,而不必重新计算。与动态规划算法不同的是,备忘录方法的递归方式
 是自顶向下的,而动态规划算法则是自底向上递归的。
 */