动态规划及其应用

1.动态规划概述
1.1 什么是动态规划
相信大家都遇到过这样一个问题:
例题1  如图1,有一个有向图,图中有n层顶点,除了第n层以外,第i层与第i+1层之间有边。边上的数值代表两个顶点的距离。要求找一条从第1层到第n层的路径,使得走过的边的和最短。
算法分析
解决这个问题有3种思路。
第1种:回溯算法。直接列举出从A到J的所有路径,并且求出所有路径当中走过距离最短的。如果假设这个图是一个满二叉树的话,这个算法的效率为2n。很明显,当n增长的时候,这个算法的效率不容乐观。
第2种:采用狄杰斯特拉算法,求这个有向图的最短路径。如果这个图有v个顶点的话,这个算法的效率为v2,已经很优秀了。
但是,这个问题有没有更好地方法呢?
假如我们把这个图按层次分一下(如图2):
不难发现,从阶段1到阶段2,阶段2到阶段3等等都是互相独立的,根据题目的意义,不会出现阶段2有一条边指向阶段3。
而从阶段i到阶段i+1的最短距离一定是 。而再仔细看,如果从阶段1到阶段3的最短路径,一定经过阶段2的最短路径。
再看一个命题:
如图3,若AB、BC为每个阶段的最优选择,那么,有ABC 为最优选择。
证明: 设有一条路径ADC,其长度和小于ABC。即要满足AD<AB; DC<BC; 但是,由于AB、BC为每个阶段的最优选择,所以与题设矛盾,故ABC 为最优选择。
所以,得到如下递推式:
题目就圆满地解决了。时间复杂度为n2。
这个问题的解决过程中,我们看到:在多阶段的问题中,各阶段的决策依赖以来于当前状态,又引起状态的转移,这种解决多阶段问题的算法称为动态规划。
1.2 动态规划中的几个概念
阶段:对于一个问题,可按其题目意思划分出各次选择的部分,这样的部分就是阶段。
状态:某一阶段的初始位置为这一阶段的状态。
决策:在对问题处理中做出选择性的行动。 
状态转移方程:前一阶段的终点就是后一阶段的起点,前一阶段的决策选择导出了后一阶段的状态,这种关系描述了由k阶段到k+1阶段状态的演变规律,称为状态转移方程。
1.3 动态规划的条件
既然动态规划算法是将问题划分成若干个可以独立解决的子部分,然后再进行汇总,那么,它一定要满足一定的条件。
最优化原则
一个最优化策略的子策略总是最优的。也就是说,对于目前的决策而言,余下的决策一定是最优的。否则这个题目将不能用动态规划算法来解决。
无后效性
当前决策与过去的状态没有任何关联。也就是说,对于目前的决策而言,不能够影响到过去的决策。否则这个题目将不能用动态规划算法来解决。
2. 动态规划算法的设计
2.1问题的后效性、最优化原则
看如下一个问题:
例题2  如图4。有一个有向图。要求求出给出顶点的最短路径。
算法分析  此题十分典型,可以使用图的最短路径算法。但是,此题是否可以使

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值