Free_Pascal动态程序设计.ppt

  1. 1、本文档共247页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划 上海市控江中学 王建德 基本概念 动态程序设计是解决多阶段决策最优化问题的一种思想方法。所谓“动态”,指的是在问题的多阶段决策中,按某一顺序,根据每一步所选决策的不同,将随即引起状态的转移,最终在变化的状态中产生一个决策序列。动态规划就是为了使产生的决策序列在符合某种条件下达到最优。 思路 令 从P ? A的最短路径为P(A);P(A) = min{P(B)+2, P(C)+3}; 数据结构 将每条路经的长度存在数组中东西方向上的道路长度存在两维数组h[4][3]中,规定数组的第一维为行号,第二维为列号。 南北方向上道路长度存至数组v[3][4]中,也规定第一维为行号,第二维为列号。 求解过程为从(0, 0)到(3, 3)求最短路径问题定义二维数组,P[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},第一维为行,第二维为列。这时P(O)为P[0][1];P(N)为P[1][0];…P(A)为P[3][3],以下为分阶段递推求解过程。 阶段1: P[0][1] = P[0][0]+h[0][0] = 0+3 = 3; P[1][0] = P[0][0]+v[0][0] = 0+2 = 3; 综上,数组P的通项表示为 P[i][j]=min((p[i-1][j]+v[i-1][j]),(p[i][j-1]+h[i][j-1]) ) (i, j0) P[0][j]=P[0][j-1]+h[0][j-1] ( i=0, j0) P[i][0]=P[i-1][0]+v[i-1][0] ( i0, j=0) 程序 动态规划的几个要素 阶段:据空间顺序或时间顺序对问题的求解划分阶段。 状态:描述事物的性质,不同事物有不同的性质,因而用不同的状态来刻画。对问题的求解状态的描述是分阶段的。 决策:根据题意要求,对每个阶段所做出的某种选择性操作。 状态转移方程:用数学公式描述与阶段相关的状态间的演变规律。 多阶段决策过程:将所研究的过程划分为若干个相互联系的阶段,在求解时,对每一个阶段都要做出决策,前一个决策确定以后,常常会影响下一个阶段的决策。 动态规划的依据——“最优性原理” “最优性原理”:不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。 最优决策序列的子序列,一定是局部最优决策子序列。注意包含有非局部最优的决策子序列,一定不是最优决策序列,例如贪心法。 动态规划的指导思想 在做每一步决策时,列出各种可能的局部解,之后依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。这样,在每一步都经过筛选,以每一步都是最优的来保证全局是最优的。筛选相当于最大限度地有效剪枝(从搜索角度看),效率会十分高。但它又不同于贪心法。 贪心法:产生一个按贪心策略形成的判定序列,该序列不保证解是全局最优的,因为有些问题不符合最优性原理。 动态规划:产生许多判定序列,再按最优性原理对这些序列加以筛选,去除那些非局部最优的子序列。 2、动态规划的基础题型 1、路径问题 2、01背包问题 3、求最佳子序列问题 4、双重动态规划 路径问题的讨论 问题的一般形式: 1、计算所有路径方案 2、计算一条最佳路径 3、计算两条最佳路径(多进程的最优化决策) 一般方法: 按照出发点走出的步数划分阶段,将当前步可达的顶点集定义为状态,当前步如何走定义为决策。注意: 1、可能需要将原题转化为路径问题 2、如果最佳路径问题不满足最优子结构特征特征的话,可以转化为判定性问题求解。 一、计算所有方案 对于一些阶段性强、但不属于最优化的问题,是否也可以借助动态规划方法呢?如果我们可以找出状态转移的关系,并在状态转移方程 例题 过河卒 如图,A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。 ? 同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图C点上的马可以控制8个点(图中的P1,P2….P8)。卒不能通过对方马的控制点。 棋盘用坐标表示,A点(0,0)、B点(n,m)(n,m为不超过20的整数,并由键盘输入),同样马的位置坐标是需要给出的(约定:C≠A,同时C≠B)。现在要求你计算出卒从A 点能够到达B点的路径的条数。 输 入:键盘输入B点的坐标(n,m)以及对方马的坐标(X,Y) 输 出:屏幕输出一个整数(路径的条数)。 1、计算对方马的控制点 按照题意,对方的马所在的点和所有跳跃一步可达的点称为对方马的

文档评论(0)

kakaxi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档