《noip动态规划》PPT课件.ppt
《《noip动态规划》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《noip动态规划》PPT课件.ppt(39页珍藏版)》请在三一办公上搜索。
1、动态程序设计,动态规划,与递归程序相类,将对问题求解分解为对子问题求解;不同之处在于把子问题的解存起来,用空间换时间。例:Fibonacci数 F(0)=0;F(1)=1;F(n)=F(n-1)+F(n-2);递归:F(n-1)和F(n-2)分别求到底一次动态规划:用数组将前n-1个数存起来,每次只用一个加法 Fn=Fn-1+Fn-2 即可。,例最短路径问题。下图中给出一个地图,地图中每个顶点代表一个城市,两个城市之间的连线表示道路,连线上的数值代表道路的长度。现在,想从城市A到城市E,怎样走路程最短,最短路程的长度是多少?现在,我们想从城市A到达城市E。怎样走才能使得路径最短,最短路径的长度
2、是多少?,设:Disx为城市x到城市E的最短路径长度(x表示任意一个城市);Mapi,j表示i,j两个城市间的距离,若mapi,j=0,则两个城市不通。我们可以使用回溯来计算Disx:,var s:未访问的城市聚合;function search(who):integer;求城市Who与城市E的最短距离Var i,j,min:integer;begin if who=E then search:=0 else begin min:=maxint;for i取遍所有城市 do if(mapwho,i0)and(i in s)then begin s:=s-i;城市i已访问 j:=mapwho,i
3、+search(i);计算城市E至城市Who的路径长度 s:=s+i;恢复城市i未访问状态 if jmin then min:=j;若城市E至城市Who的路径长度为目前最短,则记下 end;search:=min;返回城市E至城市的最短路径长度 end;begin s:=所有城市;disa:=search(a);计算城市A城市E的最短路径长度 writeln(dista);end.,这个程序的效率如何呢?我们可以看到,每次除了已经访问过的城市外,其他城市都要,所以时间复杂度为W(n!),这是一个“指数级”的算法。那么还有没有效率更高的解题方法呢?首先,我们来观察上述算法。在求B1到E的最短路径
4、的时候,先求出从C2到E的最短路径;而在求B2到E的最短路径的时候,又求了一遍从C2到E的最短路径。也就是说,从C2到E的最短路径求了两遍。两样可以发现,在求从C1、C2到E的最短路径的过程中,从D1到E的最短路径也被求了两遍。而在整个过程中,从D1到E的最短路径被求了四遍,这是多么大的一个浪费啊!如果在求解的过程中,同时将求得的最短路径的距离“记录在案”,以便将来随时调用,则可以避免这种重复计算。至此,一个新的思路产生了,即由后往前依次推出每个Dis值,直到推出DisA为止。,阶段的划分具有如下性质:阶段i的取值只与阶段i+1有关,阶段i+1的取值只对阶段i的取值产生影响;每个阶段的顺序是确
5、定的,不可以调换任两个阶段的顺序。,我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系diskx=dis4E=0k=4,3,0,其中diskx指k阶段的城市x。,我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系diskx=dis4E=0k=4,3,0,其中diskx指k阶段的城市x。,我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系diskx=dis4E=0k=4,3,0,其中diskx指
6、k阶段的城市x。,2,3,我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系diskx=dis4E=0k=4,3,0,其中diskx指k阶段的城市x。,我们从阶段4的城市E出发,按照阶段的顺序倒推至阶段0的城市a。在求解的各个阶段,利用了k阶段与k+1阶段之间的如下关系diskx=dis4E=0k=4,3,0,其中diskx指k阶段的城市x。,由此得出程序:disE0;for k3 downto 0 do for x取遍k阶段的所有城市do begin disx;for y取遍k+1阶段的所有城市do if disy+mapx
7、,ydisx then disxdisy+mapx,y;end;for输出disa;,由常识知,最短路有一个重要特性:最短路上的任一(后部)子路也是最短的。即若 A-B3-C1-D1-E 是 A-E 最短,则 B3-C1-D1-E 是 B3-E 最短路,C1-D1-E 也是C1-E 最短路.利用最短路的这一特性,构造寻找 A-E 最短路的方法,即为:从最后一段开始,即 D-E 段开始,用由后向前逐步逆推的方法,求出各点到 E 的最短路线,最后求出从 A 点到 E 点的最短路逆序法。,(动态规划的方法是从终点逐段向始点方向寻找最短路线的一种方法。),基本概念,一、阶段和状态 1、阶段k:将所给问
8、题的过程,按时间或空间特征分解成若干相互联系的阶段,以便按次序去求每阶段的解。设阶段变量为k。阶段是问题的属性。多阶段决策问题中通常存在着若干个阶段。在一般情况下,阶段是和时间有关的,但是在很多问题中,阶段和时间并无直接关系。从阶段的定义中,可以看出阶段的两个特点,一是“相互联系”,二是“次序”。阶段之间相互联系的方式是通过状态和状态转移体现的。,2、状态Sk:各阶段开始时的客观条件叫做状态。描述各阶段状态的变量称为状态变量,常用Sk表示第k阶段的状态变量,状态变量Sk的取值集合称为状态集合。用Sk表示。例如S2=C1,C2,C3,C4。状态是阶段的属性。每个条件通常包含若干个状态,用以描述问
9、题发展到这个阶段时所处在的一种客观情况。S1=B1,B2。每个阶段的状态都是由以前阶段的状态以某种方式“变化”而来,这种“变化”称为状态转移。应用动态程序设计方法的一个重要条件。那就是将各阶段按照一定的次序排列好之后,对于阶段i的状态只能由阶段i+1的状态通过状态转移方程得来,与其它状态没有关系,尤其是与未发生的状态没有关系。换句话说,每个状态都是“过去历史的一个完整总结”。这就是无后效性。,二、决策和策略1、决策uk(sk):当阶段的状态取定以后,就可以做出不同的决定,从而确定下一阶段的状态,这种决定称为决策。表示决策的变量称为决策变量,常用Uk(Sk)表示第k阶段当状态为Sk时的决策变量。
10、在实际问题中,决策变量的取值往往限制在一定范围内,我们称此范围为允许决策集合。常用Dk(Sk)表示第k阶段从状态Sk出发的允许决策集合。显然有uk(sk)Dk(sk)决策是问题解的属性。决策的目的就是“确定下一阶段的状态”。从阶段1的B1状态出发有三条路,也就是三个决策,分别导向阶段2的C1,C2,C3三个状态,即D1(B1)=C1,C2,C3。动态程序设计方法中本阶段的状态往往是对上一阶段某状态进行相应决策的结果,由第k段的状态Sk和决策Uk确定第k+1段的状态Sk+1的过程叫状态转移。状态转移规律的形式化表示sk+1=Tk(sk,uk)称为状态转移方程。决策的目的是转移状态,状态转移的途径
11、是决策。,2、策略pl,n:各段决策确定后,整个问题的决策序列就构成一个策略,用p1,n=u1(s1),u2(s2),un(sn)表示。对每个实际问题,可供选择的策略有一定范围,称为允许策略集合,记作P1,n,使整个问题达到最有效果的策略就是最优策略。运用动态程序设计方法的一个前提。即这个过程的最优策略应具有这样的性质:无论初始状态及初始决策如何,对于先前决策所形成的状态而言,其以后的所有决策应构成最优策略。这就是最优化原理。简言之,就是最优策略的子策略也是最优策略。,最优化原理与无后效性,该问题的解必须符合最优化原理是前提。这是因为是否符合最优化原理是一个问题的本质特征。对于不满足最优化原理
12、的一个多阶段决策问题,整体上的最优策略p1,n同任何一个阶段k上的决策Uk或任何一组阶段k1,,k2上的子策略pk1,k2都不存在任何关系。如果要对这样的问题进行动态程序设计的话,我们从一开始所作的划分阶段等如努力进都将是徒劳的。问题的求解过程必须具备无后效性的特点是条件。因为动态程序设计方法是按次序去求每阶段的解,如果一个问题有后效性,那么这样的次序便是不合理的。但是,我们可以通过重新划分阶段或选定状态以及增加状态变量个数等手段,来使得问题满足无后效性这个条件。说到底,还是要确定一个“序”。,最优指标函数和状态转移方程用于衡量所选定策略优劣的数量指标称为指标函数,指标函数记Fk(Sk),它表
13、示从第k段状态Sk采用策略P*k,n到过程终止时的最佳效益值。最优指标函数其实就是我们真正关心的问题的解。在上例中,F1(B1)就表示从B1点到终点E的最短路径长度。我们求解的最终目标就是F0(A)。最优指标函数的求法一般是一个从目标状态出发的递推公式,称为状态转移议程:,其中Sk是第k段的某个状态,Uk是从Sk出发的允许决策集合Dk(Sk)中的一个决策,Tk(Sk,Uk)是定义在数值x和决策Uk上的一个函数,而函数opt表示最优化,根据具体问题分别表示为max或min。例中最短路径问题的状态转移方程就是,(边界条件),1、确定问题的研究对象,即状态。选定的状态必须满足如下两点:状态必须完全描
14、述出事物的性质,两个不同事物的状态是不同的;必须存在状态与状态之间的“转移方程”,以便我们可以由初始状态逐渐转化为目标状态。由于状态是描述事物性质的量,所以我们应该以上述要求为标准,具体情况具体分析。2、划分阶段,确定阶段之间的状态转移方程;3、考察此问题可否用动态程序设计方法解决,即问题是否具备最优子结构和无后效性的特征4、如果发现问题目前不能用动态程序设计方法解决,则调整阶段的划分和状态的定义,使其具备最优子结构和无后效性的特征。,使用动态程序设计方法解题的步骤,程序设计的一般格式;for kn-1 downto 1 do 枚举阶段 for s取遍所有状态 do for u取遍所有决策 d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- noip动态规划 noip 动态 规划 PPT 课件

链接地址:https://www.31ppt.com/p-5625838.html