动态规划的求解步骤

动态规划算法适合于求解最优化问题,通常可按下列步骤来设计动态规划算法:


(1)分析最优解的性质,并刻画其最优子结构特征;


(2)确定状态表示S(x1,x2,...)和状态递推方程,递归地定义最优值;


(3)根据状态转移顺序,以自底向上的方式计算出最优值;


(4)根据计算最优值时得到的信息,构造最优解。


第(1)步是基础,也是关键。在分析最优子结构性质时,子解分解和子解对应的子问题描述是关键。有两种子解分解方法:基于划分的方法和基于减一的方法。


在第一种方法中,问题的最优解依据问题性质划分成两个或者多个子解,但是其划分位置无法事先确定;


在第二种方法中,问题的最优解依据问题性质减缩规模,比如减去最优解的第一个分量,或者最后一个分量,得到规模减少一个单位的子解。得到子解后,分析和描述该子解对应的子问题,如果能证明该子解对应子问题的最优解,则该问题满足最优子结构性质,转入第(2);否则,该问题不能用动态规划求解。


第(2)步是动态规划算法的核心,它是最优解的规划过程。状态表示本质上就是子问题的表示,形如,其中是描述子问题的求解目标,一般的直接定义为待求解问题的目标值。需要注意的是,对于有些问题来说,如果直接定义为原问题目标值,可能最优子结构性质不成立。此时,往往定义为某个中间目标值,比如最大上升子序列问题。在算法实现时,状态一般用一个k维的表格存储,动态规划过程就是表格操作过程。


第(3)步体现了动态规划算法的执行过程。通俗地讲,动态规划是一个由易至难的求解过程;先求解最简单的子问题的解,然后利用简单子问题的解构造复杂一些的子问题的解,直至求解原问题的解。


第(4)步是可选步骤,只有问题要求构造最优解时才需要。




你可能感兴趣的:(算法,动态规划)