动态规划与分治法区别:
动态规划应用于子问题重叠的情况(子问题是递归求解的),分治法会反复求解公共子问题,动态规划将子问题的解保存到表格中,无需重新计算。
动态规划应用领域:
动态规划方法通常用来求解最优化问题。这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称呼这样的解为问题的一个最优解,而不是最优解,因为可能有多个解都达到最优值。
动态规划的步骤:
- 刻画一个最优解的结构特征。
- 递归地定义最优解的值。
- 计算最优解的值,通常采用自底向上的方法。
- 利用计算出的信息构造一个最优解
钢条切割
自顶向下递归实现
运行时间为指数
动态规划是付出额外的内存空间来节省时间空间,是典型的时空权衡
动态规划有两种等价的时间算法
带备忘的自顶向下法
仍按自然地递归形式编写过程,但过程会保存每个子问题的解(通常为数组或散列表)。求子问题解释,先检查是否保存过此解。
自底向上法
当求解某个子问题时,所以来的更小的子问题已求解。
子问题图
重构解
扩展动态规划算法,使其还能保存切割方案