算法合集之《动态规划的深入讨论》

算法合集之《动态规划的深入讨论》

ID:18302917

大小:282.52 KB

页数:35页

时间:2018-09-16

算法合集之《动态规划的深入讨论》_第1页
算法合集之《动态规划的深入讨论》_第2页
算法合集之《动态规划的深入讨论》_第3页
算法合集之《动态规划的深入讨论》_第4页
算法合集之《动态规划的深入讨论》_第5页
资源描述:

《算法合集之《动态规划的深入讨论》》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、动态规划的深入讨论东北育才学校李刚【关键字】动态规划、状态【摘要】本文讨论了一种解决问题十分有效的技术——“动态规划”。它较高的解题效率一直受到很大的关注。本文首先对“动态规划”的理论基础进行了讨论。给出了一个用“动态规划”可以解决的问题的两个先决条件:“最优子结构”与“无后效性”。接着,讨论了在实际应用中的两个比较常见的问题:“动态规划”中状态的选定与存储。再通过以上问题的讨论,引出了“动态规划”的基本思维方法:“不做已经做过的工作”以及“动态规划”技术在解决问题中速度惊人的原因——“解决了查看中的冗余,达到了速度的极限”。最后,阐述了解决

2、“动态规划”问题的一般步骤,即“思考,计划,应用”【正文】一.引论在信息学竞赛中,特别是最近几年,“动态规划”作为一种解题工具,经常被提及。其应用范围愈来愈广,应用程度也愈来愈深。那么,“动态规划”究竟与其它的算法有什么差别?它有什么具体的应用价值呢?本文将对此进行讨论。我们先通过一个具体问题认识一下“动态规划”。〖例1〗:图1中给出了一个地图,地图中每个顶点代表一个城市,两个城市间的连线代表道路,连线上的数值代表道路的长度。现在,我们想从城市A到达城市E,怎样走路程最短,最短路程的长度是多少?假设:Dis[X]为城市X到E的最短路线的长度;

3、(X表示任意一个城市)Map[I,J]表示I,J两个城市间的距离,若Map[I,J]=0,则两个城市不连通。这个问题我们可以用搜索法来做,程序很容易写出来:VarSe:未访问的城市集合;FunctionLong(Who:当前访问城市):Integer;:求当前访问城市与城市E的最短距离。BeginIfWho=EThenSearch:=0ElseBeginMin:=Maxint;ForI取遍所有城市DoIf(Map[Who,I]>0)And(IInSe)ThenBeginSe:=Se-[I];J:=Map[Who,I]+Long(I);Se:=

4、Se+[I];IfJ

5、C1、C2到E的最短路径的过程中,从D1到E的最短路径也被求了两遍。而在整个程序中,从D1到E的最短路径被求了四遍,这是多么大的一个浪费啊!如果在求解的过程中,同时将求得的最短路径的距离“记录在案”,随时调用,那会是多么的方便啊!于是,一个新的思路诞生了,即:由后往前依次推出每个Dis值,直到推出Dis[A]为止。这个思路的确很好,但等等,究竟什么是“由后往前”呢?所谓“后”、“前”是我们自己为城市编的序号,当两个城市I,J的前后顺序定为I“前”J“后”时,必须满足这个条件:或者I,J不连通,或者Dis[I]+Map[I,J]≥Dis[J]。

6、因为如果I,J连通且Dis[I]+Map[I,J]

7、is[A]。公式:Dis[X]=Min{Dis[Y]:Y是下一个阶段中与X相连通的城市}注:可以把E看成第4个阶段,A看成第0个阶段。程序:Dis[E]=0ForX=阶段3的每个城市Downto阶段0的每个城市DoBeginDis[X]:=Maxint;ForY=阶段X的下一个阶段中的每个城市DoIfDis[Y]+Map[X,Y]

8、”有了一个初步认识,它所处理的问题是一个“多阶段决策问题”。我们现在对一些概念进行具体定义:状态(State):它表示事物的性质,是描述“动态规划”中的“单元”的量

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。