动态程序设计PPT讲稿.ppt
《动态程序设计PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《动态程序设计PPT讲稿.ppt(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、动态程序设计第1页,共71页,编辑于2022年,星期五基本原理1、多多阶阶段段最最优优化化决决策策:即由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条最优的活动路线。第2页,共71页,编辑于2022年,星期五带权有向的多段图上一阶段的状态下一阶段的状态决策第3页,共71页,编辑于2022年,星期五概念w状状态态(State):表示事物的性质,是描述“动态规划”中的“单元”的量。亦是每一阶段求解过程的出发点。w阶阶段段(Stage):阶段是一些性质相近,可以同同时时处处理理的状态集合,或者说,阶段只是标识那些处理方法相同、处理顺序无
2、关的状态。w决决策策(Decision):每个阶段做出的某种选择性的行动,是程序所需要完成的选择。w状状态态转转移移方方程程:是前一个阶段的状态转移到后一个的状态的演变规律,是关于两个相邻阶段状态变化的方程,是“动态规划”的中心。设设 fk(i)k阶段状态i的最优权值,即初始状态至状态i的最优代价 fk+1(i)=minxk(j)+u(i,j)第4页,共71页,编辑于2022年,星期五基本原理w最优性原理作为整个过程的最优策略,它满足:相对前面决策所形成的状态而言,余下的子策略必然构成“最优子策略”。无后效性原则给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响,所有各
3、阶段都确定时,整个过程也就确定了。这个性质意味着过程的历史只能通过当前的状态去影响它的未来的发展,这个性质称为无后效性。第5页,共71页,编辑于2022年,星期五机器分配w总公司拥有高效生产设备M台,准备分给下属的N个公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M=15,N=10。分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数M。w数据文件格式为:第一行保存两个数,第一个数是设备台数M,第二个数是分公司数N。接下来是一个M*N的矩阵,表明了第I个公司分配J台机器的盈利。第6页,共71页,编辑于2
4、022年,星期五分析w用机器数来做状态,数组FI,J表示前I个公司分配J台机器的最大盈利。则状态转移方程为:wFI,J=MaxFI-1,K+ValueI,J-K(1=I=N,1=J=M,0=K=J)w初始值:F(0,0)=0w时间复杂度O(N*M2)第7页,共71页,编辑于2022年,星期五最长不下降序列w设 有 整 数 序 列b1,b2,b3,bm,若 存 在 下 标i1i2i3 in,且bi1bi2bi3 bin,则称 b1,b2,b3,bm中有长度为n的不下降序列bi1,bi2,bi3,bin。w求序列b1,b2,b3,bm中所有长度(n)最大不下降子序列w输入:整数序列。w输出:最大长
5、度n和所有长度为n的序列个数。第8页,共71页,编辑于2022年,星期五分析(1)设f(i)为前i个数中的最大不下降序列长度,则wf(i)=maxf(j)+1 (1=ji=m,bjbi)w边界为F(1)=1(2)设t(i)为前i个数中最长不下降序列的个数,则wt(i)=t(j)(1=ji=m,bjbi,f(i)=f(j)-1)w初始为t(i)=1w当f(i)=n时,将t(i)累加w举例:1234658109f:123455677t:111111222答案:f=7时,边界为t=4第9页,共71页,编辑于2022年,星期五进一步(3)求本质不同的最长不下降序列个数有多少个?如:1234658109
6、有,12346810,12345810,1234689,1234589都是本质不同的。但对于1223354f1223354t1112244答案有8个,其中4个1235,4个1234第10页,共71页,编辑于2022年,星期五改进算法w上例显然对于相两个相同的数,重复算了多次因此,我们对算法进行改进:w对原序列按b从小到大(当bi=bj时按F从大到小)排序,增设Order(i)记录新序列中的i个数在原序列中的位置。可见,w求t(i)时,当f(j)=f(j+1),b(j)=b(j+1)且Order(j+1)Order(i)时,便不累加t(j)。这样就避免了重复。w上述算法的时间复杂度为O(n2)第
7、11页,共71页,编辑于2022年,星期五凸多边形三角划分w给定一个具有N(N50)个顶点(从1到N编号)的凸多边形,每个顶点的权均已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小?w输入文件:第一行 顶点数Nw 第二行 N个顶点(从1到N)的权值w输出格式:最小的和的值w 各三角形组成的方式w输入示例:5w122 123 245 231 w输出示例:The minimum is:12214884w The formation of 3 triangle:w 3 4 5,1 5 3,1 2 3 第12页,共71页,编辑于2022年,星期五分析w设F
8、I,J(IJ)表示从顶点I到顶点J的凸多边形三角剖分后所得到的最大乘积,我们可以得到下面的动态转移方程:wFI,J=MinFI,K+FK,J+SI*SJ*SK (0IKJ=N)w初始条件:F1,2=0w目标状态:F1,Nw但我们可以发现,由于这里为乘积之和,在输入数据较大时有可能超过长整形范围,所以还需用高精度计算第13页,共71页,编辑于2022年,星期五系统可靠性w一个系统由若干部件串联而成,只要有一个部件故障,系统就不能正常运行,为提高系统的可靠性,每一部件都装有备用件,一旦原部件故障,备用件就自动进入系统。显然备用件越多,系统可靠性越高,但费用也越大,那么在一定总费用限制下,系统的最高
9、可靠性等于多少?w给定一些系统备用件的单价Ck,以及当用Mk个此备用件时部件的正常工作概率Pk(Mk),总费用上限C。求系统可能的最高可靠性。w输入文件格式:第一行:nC第二行:C1P1(0)P1(1)P1(X1)(0=X1=C/Ck)第n行:CnPn(0)Pn(1)Pn(Xn)(0=Xn=C/Cn)第14页,共71页,编辑于2022年,星期五分析w例:输入:22030.60.650.70.750.80.850.950.70.750.80.80.90.95输出:0.6375w设FI,money表示将money的资金用到前I项备用件中去的最大可靠性,则有w FI,money=maxFI-1,mo
10、neyk*CostI w (0=I=n,0=K=money div Cost(I)w初始:F0,0=0w目标:Fn,C=0第15页,共71页,编辑于2022年,星期五快餐问题wPeter最近在R市开了一家快餐店,为了招揽顾客,该快餐店准备推出一种套餐,该套餐由A个汉堡,B个薯条和C个饮料组成。价格便宜。为了提高产量,Peter从著名的麦当劳公司引进了N条生产线。所有的生产线都可以生产汉堡,薯条和饮料,由于每条生产线每天所能提供的生产时间是有限的、不同的,而汉堡,薯条和饮料的单位生产时间又不同。这使得Peter很为难,不知道如何安排生产才能使一天中生产的套餐产量最大。请你编一程序,计算一天中套餐
11、的最大生产量。为简单起见,假设汉堡、薯条和饮料的日产量不超过100个。w输入:第一行为三个不超过100的正整数A、B、C中间以一个空格分开。第二行为3个不超过100的正整数p1,p2,p3分别为汉堡,薯条和饮料的单位生产耗时。中间以一个空格分开。第三行为N(0=0=10),第四行为N个不超过10000的正整数,分别为各条生产流水线每天提供的生产时间,中间以一个空格分开。w输出:每天套餐的最大产量。第16页,共71页,编辑于2022年,星期五分析w本题是一个非常典型的资源分配问题。由于每条生产线的生产是相互独立,不互相影响的,所以此题可以以生产线为阶段用动态规划求解。w状态表示:用pi,j,k表
12、示前i条生产线生产j个汉堡,k个薯条的情况下最多可生产饮料的个数。w用ri,j,k表示第i条生产线生产j个汉堡,k个薯条的情况下最多可生产饮料的个数。w态转移方程:pi,j,k=Maxpi-1,j1,k1+ri,j-j1,k-k1 (0=j1=j=100,0=k1=k=100,且(j-j1)*p1+(k-k1)*p2=Ti-第i条生产线的生产时间)wri,j-j1,k-k1=(Ti-(j-j1)*p1+(k-k1)*p2)div p3;w此算法的时间复杂度为O(N*1004),第17页,共71页,编辑于2022年,星期五优化w在本题中,可以在动态规划方法中加入了贪心算法思想:即首先计算出每天生
13、产套数的上限值(由A,B,C计算,即min100divA,100divB,100divc),接着,用贪心法计算出这N条流水线可以生产的套数,并与上限比较,大于则输出上限值并退出,否则再调用动态规划;同时,在运行动态规划的过程中,也可以每完成一阶段工作便与上限值进行比较,这样以来,便可望在动态规划完成前提前结束程序。其算法设计为:wS1:读入数据。wS2:贪心求上限并计算出一可行解,判断是否需进行下一步。wS3:动态规划求解。wS4:输出。第18页,共71页,编辑于2022年,星期五其他优化方法w1.存储结构:由于每一阶段状态只与上一阶段状态有关,所以我们可以只用两个100*100的数组滚动实现
14、。但考虑到滚动是有大量的赋值,可以改进为动态数组,每次交换时只需交换指针即可,这样比原来数组间赋值要快。w2.减少循环次数:在计算每一阶段状态过程中无疑要用到4重循环,我们可以这样修改每一重循环的起始值和终数,其中q1,q2为A,B上限值。w 原起始值 改进后的起始值wfor i:=1 to n do for i:=1 to n do wfor j:=0 to toti div p1 do for j:=0 to min(q1,toti div p1)dowfor k:=0 to(toti-p1*j)div p2 do for k:=0 to min(q2,(toti-p1*j)div p2)
15、dowfor j1:=0 to j do for j1:=max(0,j-ti div p1)to min(j,toti-1 div p1)dow for k1:=0 to k do for k1:=max(0,k-(ti-(j-j1)*p1)div p2)to min(k,(toti-1-p1*j1)div p2)do 第19页,共71页,编辑于2022年,星期五石子合并w在一园形操场四周摆放N堆石子(N100),现要将石子有次序地合并成一堆.规定每次只能选相临的两堆合并成一堆,并将新的一堆的石子数,记为该次合并的得分。编一程序,由文件读入堆数N及每堆石子数(20),(1)选择一种合并石子的
16、方案,使得做N-1次合并,得分的总和最少(2)选择一种合并石子的方案,使得做N-1次合并,得分的总和最大w输入数据:第一行为石子堆数N;第二行为每堆石子数,每两个数之间用一空格分隔.w输出数据:从第1至第N行为得分最小的合并方案.第N+1行为空行.从N+2到2N+1行是得分最大的合并方案.第20页,共71页,编辑于2022年,星期五示例第21页,共71页,编辑于2022年,星期五贪心法N=5 石子数分别为3 4 6 5 4 2。用贪心法的合并过程如下:第一次3 4 6 5 4 2得分5第二次5 4 6 5 4得分9第三次9 6 5 4得分9第四次9 6 9得分15第五次15 9得分24第六次2
17、4总分:62然而仔细琢磨后,发现更好的方案:第一次3 4 6 5 4 2得分7第二次7 6 5 4 2得分13第三次13 5 4 2得分6第四次13 5 6得分11第五次13 11得分24第六次24总分:61显然,贪心法是错误的。第22页,共71页,编辑于2022年,星期五动态规划w用datai,j表示将从第i颗石子开始的接下来j颗石子合并所得的分值,wmaxi,j表示将从第i颗石子开始的接下来j颗石子合并可能的最大值,那么:wmaxi,j=max(maxi,k+maxi+k,jk+datai,k+datai+k,jk)(2=k=j)wmaxi,1=0w同样的,我们用mini,j表示将第从第i
18、颗石子开始的接下来j颗石子合并所得的最小值,可以得到类似的方程:wmini,j=min(mini,k+mini+k,jk+datai,k+datai+k,jk)(0=k=j)wmini,0=0w这样,我们完美地解决了这道题。时间复杂度也是O(n2)。第23页,共71页,编辑于2022年,星期五积木游戏w一种积木游戏,游戏者有N块编号依次为1,2,N的长方体积木。第I块积木通过同一顶点三条边的长度分别为ai,bi,ci(i=1,2,N),1从N块积木中选出若干块,并将他们摞成M(1=M=N)根柱子,编号依次为1,2,M,要求第k根柱子的任意一块积木的编号都必须大于第K-1根柱子任意一块积木的编号
19、(2=K=n),x,y是上面一块积木接触面的两条边(x=y),则一定满足m.=x和n=y;w下面的积木的编号要小于上面的积木的编号。w请你编一程序,寻找一种游戏方案,使得所有能摞成的M根柱子的高度之和最大。第24页,共71页,编辑于2022年,星期五积木游戏w输入数据:w文件的第一行是两个正整数N和M(1=M=N=100),分别表示积木总数和要求摞成的柱子数。这两个数之间用一个空格符隔开。接下来的N行是编号从1到N个积木的尺寸,每行有三个1至500之间的整数,分别表示该积木三条边的长度。同一行相邻两个数之间用一个空格符隔开。w输出数据:w文件只有一行,是一个整数,表示所求得的游戏方案中M根柱子
20、的高度之和第25页,共71页,编辑于2022年,星期五分析w设(1)fi,j,k表示以第i块积木的第k面为第j根柱子的顶面的最优方案的高度总和;(2)blocki,k记录每个积木的三条边信息(blocki,4:=blocki,1;blocki,5:=blocki,2)。其中blocki,j+2表示当把第i块积木的第j面朝上时所对应的高,即所增加的高度;(3)cani,k,p,kc表示第I块积木以其第k面朝上,第p块积木以第kc面朝上时,能否将积木I放在积木p的上面。1表示能,0表示不能。对于fi,j,k,有两种可能:1.除去第I块积木,第j根柱子的最上面的积木为编号为p的,若第p块积木以第kc
21、面朝上,必须保证当第I块积木以k面朝上时能够被放在上面,即cani,k,p,kc=1;2.第i块积木是第j根柱子的第一块积木,第j-1根柱子的最上面为第p块积木,则此时第p块积木可以以任意一面朝上。则有:第26页,共71页,编辑于2022年,星期五动态规划w边界条件:wf1,1,1:=block1,1,3;f1,1,2:=block1,1,4;f1,1,3:=block1,1,5;wfi,0,k:=0;(1=i=n,1=k=3);w时间复杂度为O(n2*m)第27页,共71页,编辑于2022年,星期五免费馅饼wSERKOI最新推出了一种叫做“免费馅饼”的游戏。w游戏在一个舞台上进行。舞台的宽度
22、为W格,天幕的高度为H格,游戏者占一格。开始时,游戏者站在舞台的正中央正中央,手里拿着一个托盘。w游戏开始后,从舞台天幕顶端的格子中不断出现馅饼并垂直下落。游戏者左右移动去接馅饼。游戏者每秒可以向左或右移动一格或两格,也可以站在愿地不动。w馅饼有很多种,游戏者事先根据自己的口味,对各种馅饼依次打了分。同时在8-308电脑的遥控下,各种馅饼下落的速度也是不一样的,下落速度以格/秒为单位。当馅饼在某一秒末恰好恰好到达游戏者所在的格子中,游戏者就收集到了这块馅饼。w写一个程序,帮助我们的游戏者收集馅饼,使得收集的馅饼的分数之和最大。第28页,共71页,编辑于2022年,星期五免费馅饼w输入数据:输入
23、文件的第一行是用空格分开的两个正整数,分别给出了舞台的宽度W(199之间的奇数)和高度H(1100之间的整数)。w接下来依馅饼的初始下落时间顺序给出了一块馅饼信息。由四个正整数组成,分别表示了馅饼的初始下落时刻(01000秒),水平位置、下落速度(1100)以及分值。游戏开始时刻为0。从1开始自左向右依次对水平方向的每格编号。w输出数据:输出文件的第一行给出了一个正整数,表示你的程序所收集到的最大分数之和。第29页,共71页,编辑于2022年,星期五分析w我们将问题中的馅饼信息用一个表格存储。表格的第I行第J列表示的是游戏者在第I秒到达第J列所能取得的分值。那么问题便变成了一个类似数字三角形的
24、问题:从表格的第一行开始往下走,每次只能向左或右移动一格或两格,或不移动走到下一行。怎样走才能得到最大的分值。w因此,我们很容易想到用动态规划求解。wFI,J表示游戏进行到第表示游戏进行到第I秒,这时游戏者站在第秒,这时游戏者站在第J列时所能得到列时所能得到的最大分值。那么动态转移方程为:的最大分值。那么动态转移方程为:FI,J=Max FI-1,K +馅饼的分值馅饼的分值 (J-2=K=J+2)第30页,共71页,编辑于2022年,星期五w有一个三角形木板,竖直立放,上面钉着n(n+1)/2颗钉子,还有(n+1)个格子(当n=5时如图1)。每颗钉子和周围的钉子的距离都等于d,每个格子的宽度也
25、都等于d,且除了最左端和最右端的格子外每个格子都正对着最下面一排钉子的间隙。w让一个直径略小于d的小球中心正对着最上面的钉子在板上自由滚落,小球每碰到一个钉子都可能落向左边或右边(概率各1/2),且球的中心还会正对着下一颗将要碰上的钉子。例如图2就是小球一条可能的路径。w我们知道小球落在第i个格子中的概率概率pi=,其中i为格子的编号,从左至右依次为0,1,.,n。w现在的问题是计算拔掉某些钉子后,小球落在编号为m的格子中的概率pm。假定最下面一排钉子不会被拔掉。例如图3是某些钉子被拔掉后小球一条可能的路径。钉子和小球第31页,共71页,编辑于2022年,星期五钉子和小球w输入:第1行为整数n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 程序设计 PPT 讲稿
限制150内