动态规划
基本要素:
-
最优子结构性质:
- 问题的最优解包含其子问题的最优解。
- 分析问题是否具有最有子结构性质:
首先假设由问题的最优解导出的其子问题的解不是最优的,再设法说明在这个假设下可构造出比原问题最优解更好的解,从而导致矛盾。
-
重叠子问题性质:
- 在用递归算法自顶向下解此问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算。
- 动态规划算法利用这种性质,对每个子问题只解决一次,然后将其解保存在一个表格中,当再次需要解决此问题时,只是简单地用常数时间查看一下之前解出来的结果。
- 故此动态规划算法一般只需要多项式时间
动态规划算法的设计步骤:
- 找出最优解的性质,刻画其结构特征
- 递归地定义最优值
- 以自底向上的方式计算最优值
- 根据计算最优值时得到的信息构造最优解
基本思想:
与分治法类似,动态规划算法的基本思想是,将待求解的问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题。但与分治法不同的是,适合用动态规划算法所分解得到的子问题往往不是相互独立的,动态规划算法解决了分治法的大量的、指数级的重复计算的问题,它用一个表来记录所有已解决的子问题的答案,无论这些子问题以后是否被用到,只要它被