动态规划(动态程序设计)-王建德课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《动态规划(动态程序设计)-王建德课件.ppt》由用户(ziliao2023)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 规划 程序设计 建德 课件
- 资源描述:
-
1、动态规划动态规划上海市控江中学上海市控江中学 王建德王建德讨论的问题讨论的问题1 1、动态规划的基本概念、动态规划的基本概念2 2、动态规划的基础题型、动态规划的基础题型3 3、动态规划的综合题型、动态规划的综合题型 基本概念基本概念动态程序设计是解决多阶段决策最优化问动态程序设计是解决多阶段决策最优化问题的一种思想方法。所谓题的一种思想方法。所谓“动态动态”,指的,指的是在问题的多阶段决策中,按某一顺序,是在问题的多阶段决策中,按某一顺序,根据每一步所选决策的不同,将随即引起根据每一步所选决策的不同,将随即引起状态的转移,最终在变化的状态中产生一状态的转移,最终在变化的状态中产生一个决策序列
2、。动态规划就是为了使产生的个决策序列。动态规划就是为了使产生的决策序列在符合某种条件下达到最优。决策序列在符合某种条件下达到最优。DAGCKBNPOMJFHELI312345214323142212223344阶段阶段1阶段阶段2阶段阶段3阶段阶段4阶段阶段5问题的引出:问题的引出:P P是出发点,从是出发点,从P P到到A A,求最短路径,求最短路径思路令 从从P A的最短路径为的最短路径为P(A);P(A)=minP(B)+2,P(C)+3;从从P B的最短路径为的最短路径为P(B);P(B)=minP(D)+1,P(E)+2;从从P C的最短路径为的最短路径为P(C);P(C)=minP
3、(E)+5,P(F)+4;上述递推公式告诉我们,要求上述递推公式告诉我们,要求P(A)P(A)需要先求出阶段需要先求出阶段5 5中的中的P(B)P(B)和和P(C)P(C);要求;要求 P(B)(P(B)(或者或者P(C)P(C)),又要先求出阶段),又要先求出阶段4 4中的中的 P(D)P(D)和和 P(E)(P(E)(或或P(F)P(F)和和P(E)P(E)(倒推)(倒推)显然,要依照上述递推过程求解,需要倒过来,从显然,要依照上述递推过程求解,需要倒过来,从P(P)P(P)出发,先求出第一阶段的出发,先求出第一阶段的P(O)P(O)和和P(N)P(N),再求第二阶段的,再求第二阶段的P(
4、K)P(K),P(L)P(L),P(M)P(M);,最后得到,最后得到P(A)P(A)(顺推)。(顺推)。h30h31h32h20h21h22h10h11h12h00h01h02v20v21v22v23v10v11v12v13v00v01v02v03(3,3)0213213yx数据结构数据结构将每条路经的长度存在数组中东西方向上的道路长度将每条路经的长度存在数组中东西方向上的道路长度存在两维数组存在两维数组h43h43中中,规定数组的第一维为行号,规定数组的第一维为行号,第二维为列号。第二维为列号。h43=3,2,3,2,1,4,3,4,5,3,1,2;南北方向上道路长度存至数组南北方向上道路
5、长度存至数组v34v34中,也规定中,也规定第一维为行号,第二维为列号。第一维为行号,第二维为列号。v34=2,2,3,4,4,1,2,4,1,2,2,3;求解过程为从(0,0)到(3,3)求最短路径问题定义二维数组,P44=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,第一维为行,第二维为列。这时P(O)为P01;P(N)为P10;P(A)为P33,以下为分阶段递推求解过程。P00=0;阶段阶段1:P01=P00+h00=0+3=3;P10=P00+v00=0+2=3;阶段阶段2:P11=min P01+v01,P10+h10=min3+1,2+2=4 P02=P01+h1
6、0=3+2=5;P20=P10+v10=2+4=6 阶段阶段3:P12=min P02+v02,P11+h11=min5+3,4+1=5 P03=P02+h02=5+3=8;P30=P20+v20=6+1=7 P21=min P11+v11,P20+h20=min4+1,6+1=5阶段阶段4:P13=min P03+v03,P12+h12=min8+4,5+4=9 P22=min P12+v12,P21+h21=min5+2,5+4=7 P31=min P21+v21,P30+h30=min5+2,7+3=7 阶段阶段5:P23=min P13+v13,P22+h22=min9+4,7+5=1
7、2 P32=min P22+v22,P31+h31=min7+2,7+1=8最后最后:P33=min P23+v23,P32+h32=min/*12+3,8+2=10综上,数组综上,数组P P的通项表示为的通项表示为Pij=min(pi-1j+vi-1j),(pij-1+hij-1)Pij=min(pi-1j+vi-1j),(pij-1+hij-1)(i,j0)(i,j0)P0j=P0j-1+h0j-1P0j=P0j-1+h0j-1(i=0,j0)(i=0,j0)Pi0=Pi-10+vi-10Pi0=Pi-10+vi-10(i0,j=0)(i0,j=0)P P数组数据数组数据圆圈内为路口对圆圈
8、内为路口对P P点的最小距点的最小距离离,箭头为最佳行走路径。箭头为最佳行走路径。for j 1 to 4 do /*计算计算0行上的每点的距离行上的每点的距离*/p0j p0j-1+h0j-1;For i 1 to 4 do /*计算计算0列上的每点的距离列上的每点的距离*/pi0 pi-10+vi-10;for i 1 to 4 do for j 1 to 4 do pijmin(pi-1j+vi-1j),(pij-1+hij-1);For i3 downto 0 do /*输出每个路口对输出每个路口对P点的最小距离点的最小距离*/for j 0 to 3 do write(pij:4)w
9、riteln;/*for*/程序程序 阶段:据空间顺序或时间顺序对问题的求解划分阶段。阶段:据空间顺序或时间顺序对问题的求解划分阶段。状态:描述事物的性质,不同事物有不同的性质,因状态:描述事物的性质,不同事物有不同的性质,因而用不同的状态来刻画。对问题的求解状态的描述是分而用不同的状态来刻画。对问题的求解状态的描述是分阶段的。阶段的。决策:根据题意要求,对每个阶段所做出的某种选择决策:根据题意要求,对每个阶段所做出的某种选择性操作。性操作。状态转移方程:用数学公式描述与阶段相关的状态间状态转移方程:用数学公式描述与阶段相关的状态间的演变规律。的演变规律。多阶段决策过程:将所研究的过程划分为若
10、干个相互多阶段决策过程:将所研究的过程划分为若干个相互联系的阶段,在求解时,对每一个阶段都要做出决策,联系的阶段,在求解时,对每一个阶段都要做出决策,前一个决策确定以后,常常会影响下一个阶段的决策。前一个决策确定以后,常常会影响下一个阶段的决策。动态规划的几个要素动态规划的几个要素 “最优性原理最优性原理”:不论初始状态和第一步:不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。产生的新状态,构成一个最优决策序列。最优决策序列的子序列,一定是局部最优最优决策序列的子序列,一定是局部最优决策子序列。注意包含有非
11、局部最优的决策子决策子序列。注意包含有非局部最优的决策子序列,一定不是最优决策序列序列,一定不是最优决策序列,例如贪心法。例如贪心法。动态规划的依据动态规划的依据“最优性原理最优性原理”动态规划的指导思想动态规划的指导思想在做每一步决策时,列出各种可能的局部解,之后在做每一步决策时,列出各种可能的局部解,之后依据某种判定条件,舍弃那些肯定不能得到最优解依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。这样,在每一步都经过筛选,以每一步的局部解。这样,在每一步都经过筛选,以每一步都是最优的来保证全局是最优的。筛选相当于最大都是最优的来保证全局是最优的。筛选相当于最大限度地有效剪枝(从搜索角度
12、看),效率会十分高。限度地有效剪枝(从搜索角度看),效率会十分高。但它又不同于贪心法。但它又不同于贪心法。贪心法贪心法:产生一个按贪心策略形成的判定序列,该产生一个按贪心策略形成的判定序列,该序列不保证解是全局最优的,因为有些问题不符合序列不保证解是全局最优的,因为有些问题不符合最优性原理。最优性原理。动态规划动态规划:产生许多判定序列,再按最优性原理对产生许多判定序列,再按最优性原理对这些序列加以筛选,去除那些非局部最优的子序列这些序列加以筛选,去除那些非局部最优的子序列2 2、动态规划的基础题型、动态规划的基础题型1 1、路径问题、路径问题2 2、0101背包问题背包问题3 3、求最佳子序
13、列问题、求最佳子序列问题4 4、双重动态规划、双重动态规划路径问题的讨论路径问题的讨论问题的一般形式:问题的一般形式:1 1、计算所有路径方案、计算所有路径方案 2 2、计算一条最佳路径、计算一条最佳路径 3 3、计算两条最佳路径(多进程的最优化决策)、计算两条最佳路径(多进程的最优化决策)一般方法:一般方法:按照出发点走出的步数划分阶段,将当前步可达按照出发点走出的步数划分阶段,将当前步可达的顶点集定义为状态,当前步如何走定义为决策。的顶点集定义为状态,当前步如何走定义为决策。注意:注意:1 1、可能需要将原题转化为路径问题、可能需要将原题转化为路径问题 2 2、如果最佳路径问题不满足最优子
14、结构特征特、如果最佳路径问题不满足最优子结构特征特征的话,可以转化为判定性问题求解。征的话,可以转化为判定性问题求解。一、计算所有方案一、计算所有方案 对于一些阶段性强、但不属于最优化的问题,是对于一些阶段性强、但不属于最优化的问题,是否也可以借助动态规划方法呢?如果我们可以找出否也可以借助动态规划方法呢?如果我们可以找出状态转移的关系,并在状态转移方程状态转移的关系,并在状态转移方程),()()(1,111Gsuwufoptsfkksukkkkkk中去掉最佳性要求中去掉最佳性要求optopt(minmin或或maxmax),将扩展子状),将扩展子状态的所有行动作为决策,则可以例举出由初始状态
15、的所有行动作为决策,则可以例举出由初始状态至目标状态的所有方案。显然,在计数类问题态至目标状态的所有方案。显然,在计数类问题中使用这种方法要比回溯法等搜索算法简捷许多。中使用这种方法要比回溯法等搜索算法简捷许多。例题 过河卒 如图,如图,A A点有一个过河卒,需要走到目标点有一个过河卒,需要走到目标B B点。卒行走的规则:可以向下、或者向右。点。卒行走的规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上同时在棋盘上的任一点有一个对方的马(如上图的图的C C点)点),该马所在的点和所有跳跃一步可达的点该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图称为对方马的控制点
16、。例如上图C C点上的马可以控点上的马可以控制制8 8个点(图中的个点(图中的P1P1,P2.P8P2.P8)。卒不能通过对方)。卒不能通过对方马的控制点。马的控制点。棋盘用坐标表示,棋盘用坐标表示,A A点(点(0 0,0 0)、)、B B点(点(n n,m m)(n,m(n,m为不超过为不超过2020的整数的整数,并由键盘输入并由键盘输入),同样马的,同样马的位置坐标是需要给出的(约定:位置坐标是需要给出的(约定:CACA,同时,同时CBCB)。现在要求你计算出卒从)。现在要求你计算出卒从A A 点能够到达点能够到达B B点点的路径的条数。的路径的条数。输输 入:键盘输入入:键盘输入B B
17、点的坐标点的坐标(n,m)(n,m)以及对方马的坐以及对方马的坐标(标(X X,Y Y)输输 出:屏幕输出一个整数(路径的条数)。出:屏幕输出一个整数(路径的条数)。按照题意,对方的马所在的点和所有跳跃一步可达的点称为对方马的控制点,卒不能通过对方马的控制点。在卒出发之前,必须计算对方马的所有控制点。显然,若(0,0)或(n,m)为控制点,则输出路径数为0。设constconstmove:array1.8,1.2of integer /move:array1.8,1.2of integer /*movek movek,1.21.2为马沿为马沿k k方向跳跃一步的水平增量和垂直增量方向跳跃一步的
18、水平增量和垂直增量*/=(1,-2),(1,2),(2,1),(2,-1),(-1,2),(-=(1,-2),(1,2),(2,1),(2,-1),(-1,2),(-1,-2),(-2,1),(-2,-1)1,-2),(-2,1),(-2,-1);varvar list:array-1.20,-1.20of comp list:array-1.20,-1.20of comp;/*listi,jlisti,j 为卒从为卒从(0,0)(0,0)到到(i,j)(i,j)的路径数的路径数*/can:array0.20,0.20of boolean can:array0.20,0.20of boolea
19、n;/*cani,jcani,j 为允许卒通行为允许卒通行(i,j(i,j)的标志的标志*/1 1、计算对方马的控制点、计算对方马的控制点设马的初始位置为(设马的初始位置为(x,yx,y)。按照下述方)。按照下述方式计算式计算cancan序列序列canx,y false;/*对方马所在的点为控制点对方马所在的点为控制点*/for i1 to 8 do /*从(从(x,y)出发,沿)出发,沿8个方向计算控制点个方向计算控制点*/jx+movei,1;/*计算计算i方向的跳马位置方向的跳马位置(j,k)*/ky+movei,2;if(j=0)and(k=0)and(j=n)and(k=m)/*若(
20、若(j,k)在界内,则)在界内,则为控制点为控制点*/then canj,kfalse;/*for*/if(not can0,0)or(not cann,m)/*若卒的起点和终点为若卒的起点和终点为控制点,则输出路径数控制点,则输出路径数0*/then writeln(0)else计算和输出卒从(计算和输出卒从(0,0)走到()走到(n,m)点的路径数)点的路径数listn,m;/*else*/我们按照由上而下、由左而右的顺序,将卒可能到达的每一我们按照由上而下、由左而右的顺序,将卒可能到达的每一个位置(个位置(i,ji,j)(0in(0in,0jm)0jm)设为阶段和状态。设为阶段和状态。首
21、先,将卒的出发点(首先,将卒的出发点(0 0,0 0)的路径数设为)的路径数设为1 1,该位置设为控,该位置设为控制点(制点(list0,01;can0,0 falslist0,01;can0,0 fals)。然后从()。然后从(0 0,0 0)出发,)出发,按照由上而下、由左而右的顺序计算卒经过每一个可行点的路径按照由上而下、由左而右的顺序计算卒经过每一个可行点的路径数数:若(若(i i,j j)为可行点,则走前位置()为可行点,则走前位置(i-1,ji-1,j)和()和(i,j-1i,j-1)的路)的路径数加起来,即为从(径数加起来,即为从(0 0,0 0)走到()走到(i i,j j)的
22、路径数,即)的路径数,即listi,j=listi-1,j+listi,j-1listi,j=listi-1,j+listi,j-1 (i i,j j)非控制点)非控制点依次类推,最后得出的依次类推,最后得出的listn,mlistn,m即为问题的解。由此得出算法:即为问题的解。由此得出算法:fillchar(list,sizeof(list),0);/*路径数序列初始化路径数序列初始化*/list0,01;can0,0 false;/*卒从(卒从(0,0)出发的路径数)出发的路径数为为1,该位置不再允许卒通行,该位置不再允许卒通行*/for i0 to n do /*按照由上而下、由左而右计
23、按照由上而下、由左而右计算从算从(0,0)到每个可行点的路径数到每个可行点的路径数*/for j0 to m do if cani,jthen listi,jlisti-1,j+listi,j-1;输出卒从(输出卒从(0,0)走到()走到(n,m)点的路径条数)点的路径条数listn,m;2 2、计算和输出卒从(、计算和输出卒从(0 0,0 0)走到()走到(n,mn,m)点的路径条数)点的路径条数计算一条最佳路径计算一条最佳路径以路径长度划分阶段,从出发点走以路径长度划分阶段,从出发点走i i步可达的顶点集合为状步可达的顶点集合为状态。设态。设fi,jfi,j 为到达阶段为到达阶段i i的顶
24、点的顶点j j的最优解。的最优解。枚举第枚举第i-1i-1阶段中与状态阶段中与状态j j相连的状态相连的状态k,k,其子问题的最优其子问题的最优解解 fi-1,k+fi-1,k+状态状态k k至状态至状态j j的决策代价的决策代价w wk,jk,j即为阶段即为阶段i i的状态的状态j j的一种方案。枚举了所有可能方案后即可得出的一种方案。枚举了所有可能方案后即可得出fi,jfi,j。fi-1,k1Wk1,jfi-1,k2Wk2,jfi-1,kpWkp,j寻宝游戏寻宝游戏 分析分析在“藏宝图”中寻求一条含len个顶点的路径,使得(1klen)(xk,yk)-ak)2最小。数据结构数据结构cons
25、t ex:array1.4of shortint=(0,0,1,-1);ey:array1.4of shortint=(1,-1,0,0);var n,m,len,i,j,k,l,i0,j0:integer;/*n,m为为“藏宝图藏宝图”的规模的规模*/mp:array1.50,1.50of integer;/*“藏宝图藏宝图”*/c0,c1:array1.50,1.50of longint;/*c0I,j为为ck-1,I,j;c1I,j为为ck,I,j*/a:array1.150of integer;/*数列数列*/ans:longint;/*数列与表格的接近程度数列与表格的接近程度*/输入
展开阅读全文