【数据结构与算法】动态规划(Dynamic Programming)
动态规划的概念
每次决策依赖当前的状态,又随即引起状态的转移。一个决策序列就是在变化状态中产生出来的,所以这种多阶段最优化决策解决问题的过程就是动态规划。
动态规划的基本思想和策略
和分治算法类似是将待求解的问题分解成若干个子问题,按顺序求解子阶段,前一问题的解为后一个子问题的求解提供了有用的信息。最后一个子问题就是初始问题的解。适合用于动态规划求解的问题,经过分解后得到的子问题往往不是相互独立的。就是说下一个问题求解是建立在上一个问题求解之上的。所以每个子问题都是紧密相连的。
动态规划的分类
1. 线性动态规划。
2. 区域动态规划。
3. 树形动态规划。
4. 背包动态规划。
动态规划求解的问题具有三个性质
1. 最优化原理。如果问题的最优解所包含的子问题的解也是最优的就称这个问题具有最优子结构,也就满足了最优化原理。
2. 无后效性。某个阶段的状态一旦确定就不受这个状态以后决策的影响,只与当前的状态有关。
3. 有重叠子问题。子问题之间不是独立的。
动态规划求解的基本步骤
1. 划分阶段。按照问题的时间或者空间进行划分若干个阶段。
2. 确定状态和状态变量。将问题发展到各个阶段时所处于的各种情况用不同的状态来表示出来。
3. 确定决策和写出状态转移方程。这个步骤是动态规划中非常重要的步骤。
4. 寻找边界条件。为状态转移方程来找到递推式。