动态规划算法的基本思想

Z, ZLW 741

动态规划(Dynamic Programming)算法的基本思想是将待求解问题分解为更小的、相同的子问题,然后对子问题进行求解,然后从这些子问题的解一步步得到原问题的最优解,该基本思想比较简单,实质是分治思想和解决冗余,因此它与分治法和贪心法类似,将待求解问题分解成若干个子问题。

一、动态规划算法的基本思想

动态规划算法的思想比较简单,其实质是分治思想和解决冗余,因此它与分治法和贪心法类似,它们都是将待求解问题分解为更小的、相同的子问题,然后对子问题进行求解,最终产生一个整体最优解。

适合采用动态规划法求解的问题,经分解得到的各个子问题往往不是相互独立的。在求解过程中,将已解决的子问题的解进行保存,在需要时可以轻松找出。这样就避免了大量的无意义的重复计算,从而降低算法的时间复杂性。如何对已解决的子问题的解进行保存呢?通常采用表的形式,即在实际求解过程中,一旦某个子问题被计算过,不管该问题以后是否用得到,都将其计算结果填入该表,需要的时候就从表中找出该子问题的解,具体的动态规划算法多种多样,但它们具有相同的填表格式。

二、动态规划的适用情况

1、最优子结构

最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。

2、无后效性

无后效性。即子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策影响。

3、子问题重叠

子问题重叠性质。子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。

三、动态规划解决问题的步骤

  1. 寻找最优子结构(状态表示)
  2. 归纳状态转移方程(状态计算)
  3. 边界初始化

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部