目录
算法思想
动态规划算法的思想与分治算法类似,也是将待求解的问题划分为若干子问题,按划分的顺序求解子阶段问题前一个子问题的解,为后一子问题的求解提供了有用的信息(最优子结构)。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各个子问题,最后求出原问题的最优解。
与分治算法最大的区别:适用于动态规划算法求解的问题,经分解后得到的子问题往往不是互相独立的。 如图所示:
求解问题的基本步骤
动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。动态规划算法的代码设计都有一定的模式,一般都要经过以下几个步骤:
初始状态 -> 决策1 -> 决策2 -> ........ -> 决策n -> 结束状态
- 找出最优解的性质,并刻画其结构特征(找问题状态)
- 递归的定义最优值 (找状态转移方程)
- 自底向上的方式计算出最优值
- 根据计算最优值时得到的信息,构造最优解