码迷,mamicode.com
首页 > 编程语言 > 详细

动态规划算法

时间:2014-12-07 09:02:03      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:算法   动态规划   



1.基本概念

      动态规划过程是:多阶段最优化决策的过程,每次决策依赖于当前状态,又随即引起状态的转移(即状态递推方程),一个决策序列就是在变化的状态中产生出来的,最终得到最优化的决策。

 

2.基本思想与策略

      该算法通常基于一个递推公式(状态转移方程,即问题与子问题关系)及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。使用动态规划来解题只需要多项式时间复杂度。

      基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

     由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。

 

3.适用情况

1最优子结构性质

      当问题的最优解包含其子问题的最优解时,称该问题具有最优子结构性质(隐含了最优解间的一种递推关系,可推出递推方程)。即如果把问题的最优解分解(划分两个或多个部分,或者删除第一个或最后一个分量),得到一个子解,那么该子解是特定子问题的最优解。通常由反证法证明最优子结构性质。动态规划,利用问题的最优子结构性质,以自底向上的方式递归的从子问题的最优解逐步构造出整个问题的最优解。

2)重叠子问题性质

      动态规划,避开了递归时,重复的计算相同子问题的过程(由递推式知),对每个子问题只解一次,而后将其保存在一个表格(可能是高维表格)中,当再次需要的时候,只是简单的用常数时间查看一下结果,实现了自底向上的求解。当然也可以通过备忘录方法,实现自顶向下的递归求解。该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)

3)无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

 

3.动态规划求解步骤

      动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。

   初始状态→决策1决策2决策n→结束状态

1分析是否有最优子结构性质(通过使用反证法证明)

      子解分解法:基于划分的方法,把问题划分成两个或者多个子问题,但划分位置无法实现确定(一般采用枚举);基于减一的方法,即依据问题性质缩减规模,减去最优解第一个或最后一个分量,得到规模少一个单位的子解;

2确定状态表示和状态递推方程,递归定义最优值

      状态表示本质上是子问题的表征(以数学形式表示),用来描述该问题的子问题的解;该步是动态规划的核心,是最优解的规划过程,由此步构造算法;根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程。状态转移方程,描述了状态之间是如何转移的

3确定状态转移顺序,以自底向上方式计算出最优值

      该步体现了动态规划的执行过程,即由易至难的求解过程(按顺序逐阶段求解),由子问题到原问题的求解过程;

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


参考资料

http://www.360doc.com/content/14/1207/01/20831910_430949704.shtml

http://www.cnblogs.com/bourbon/archive/2011/08/23/2151044.html

http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html


 



动态规划算法

标签:算法   动态规划   

原文地址:http://blog.csdn.net/ghuilee/article/details/41783893

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!