一.适用条件
1.最优子结构性质(最优化原理)
一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。
2.无后效性(子问题的独立性)
将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。
3.子问题的重叠性
动态规划将原来具有指数级时间复杂度的搜索算法改进成了具有多项式时间复杂度的算法。其中的关键在于解决冗余,这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。
二.动态规划的一般过程
1.描述最优解的结构(找出状态)
2.递归定义最优解的值(列出状态转移方程)
3.按自底向上的方式计算最优解的值
4.由计算出的结果构造一个最优解
三.动态规划问题一般求解方法
1.递推计算
2.记忆化搜索
PS:当状态定义有后效性时,即先前的决策可能影响后续的决策,解决方法是扩展状态定义,把有后效性的部分包含进来。