算法导论笔记——第十五章 动态规划

更多博客,请访问我的个人网站 点此访问

一、概念部分

第一部分比较抽象,建议先大体上浏览一下,有个初步印象,等熟悉第二部分的具体的例题之后,回过头再仔细总结这一部分。

1.1 动态规划法思想

首先说明一点,动态规划(dynamic programming)中的programming指的是一种表格法,而不是编程的意思。动态规划法的思想妙就妙在这个“表格”上。根据动态规划思想,要求解一个问题,先求解它的子问题,然后根据子问题的解,得到该问题的解。而要求解子问题,则要继续求解子问题的子问题,如此可以递归的进行下去。这里需要注意的是,不同的问题,可能具有公共的子问题,这些公共的子问题的解,求解一次之后,问题的解可以记录在表格中,避免多次求解。

1.2 动态规划 VS 分治法

  • 共同点:动态规划与分治法类似,都是通过组合子问题的解来求解原问题。

  • 不同点:分治法将问题划分为互不相交的子问题,递归地求解子问题,再将它们的解组合起来,求出原问题的解;而动态规划法用于子问题重叠的情况。

1.3 适用范围

最优化问题(optimization problem),这类问题可以有很多可行的解,每个解都有一个值,动态规划法可以求出具有最优值(最大值或最小值)的解。

1.4 动态规划算法的设计步骤

  1. 刻画一个最优解的结构特征。也就是定义状态。
  2. 递归地定义最优解的值。也就是找出状态转移方程。就是考虑,如何通过子问题的解,去求解原问题的解?
  3. 计算最优解的值,通常采用自底向上的方法。按问题规模由小到大,计算所有子问题,得到规模最大的,最原始问题的解。
  4. 利用计算出的信息构造一个最优解。

二、具体问题

2.1 钢条切割

你可能感兴趣的:(算法)