




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
算法设计与分析,广东白云学院计算机科学系2010-2011学年第2学期,第3章动态规划法,本章目录,返回,3.1概述,3.2图问题中的动态规划法,3.3组合问题中的动态规划法,3.4查找问题中的动态规划法,3.1概述,3.1.2最优化问题,3.1.3最优性原理,3.1.4动态规划法的设计思想,返回,3.1.1动态规划法简介,动态规划法与分治法类似,其基本思想也是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。,3.1.1动态规划法简介,与分治法不同的是,适合用动态规划求解的问题,经分解得到的子问题往往不是互相独立的。若用分治法解这类问题,则分解得到的子问题太多,以致于最后解决原问题需要耗费指数时间。在用分治求解时,有些子问题被重复计算了多次。如果能够保存已解决的子问题的答案。在需要的时候再找出已求的答案,就可以避免大量的重复计算,从而简化了算法。为了达到这个目的,可以用一个表来记录所有已解决的子问题答案。不管该子问题以后是否被用到,只要他被计算过,就将其结果填入表中。这就是动态规划法的基本思想。,图中每个顶点代表一个城市,两个城市间的连线代表道路,连线上的数值代表道路的长度。现在,想从城市A到达城市E,怎样走路程最短,最短路程的长度是多少?,多阶段决策过程最优化问题,最短路径的特性:最短路径的第k阶段通过Xk点,则这一最短路径在由Xk出发到终点的那一部分路径,对于起始点为Xk到终点的所有可能的路径来说必定也是路径最短的.,利用倒推方法求解A到E的最短距离。把从A到E的全过程分成四个阶段,用k表示阶段变量,第1阶段有一个初始状态A,两条可供选择的支路ABl、AB2;第2阶段有两个初始状态B1、B2,B1有三条可供选择的支路,B2有两条可供选择的支路。用dk(xk,xk+1)表示在第k阶段由初始状态xk到下阶段的初始状态xk+1的路径距离,Fk(xk)表示从第k阶段的xk到终点E的最短距离。,求从A到E的最短路问题Fk(A),可以转化为两个性质完全相同,但规模较小的问题,即分别从B1、B2到E的最短路问题Fk(B1)和Fk(B2),这时有:Fk(A)=mind1(A,B1)+Fk(B1),d1(A,B2)+Fk(B2)同样,计算Fk(B1),又可以转化为性质完全相同,但规模更小的问题,即分别从C1、C2、C3到E的最短路问题Fk(C1)、Fk(C2)和Fk(C3),最后,归结为Fk(D1)、Fk(D2)两个子问题。由于Fk(D1)、Fk(D2)是已知的,因此,可以从这两个值开始,逆向递归计算出Fk(A)的值。最终,可以得到从A到E的最短路径。动态规划法就是根据最优性原理,以自底向上的方式从子问题的最优解逐步构造出整个问题的最优解。(逆向递归的方法),S1:K=4,有:F4(D1)=3,F4(D2)=4,F4(D3)=3S2:K=3,有:F3(C1)=mind3(C1,D1)+F4(D1),d3(C1,D2)+F4(D2)=min8,10=8F3(C2)=d3(C2,D1)+F4(D1)=5+3=8F3(C3)=d3(C3,D3)+F4(D3)=8+3=11F3(C4)=d3(C4,D3)+F4(D3)=3+3=6S2:K=2,有:F2(B1)=mind2(B1,C1)+F3(C1),d2(B1,C2)+F3(C2),d2(B1,C3)+F3(C3)=min9,14,14=9F2(B2)=mind2(B2,c2)+F3(C2),d2(B2,C4)+F3(C4)=min16,10=10S4:k=1,有:F1(A)=mind1(A,B1)+F2(B1),d1(A,B2)+F2(B2)=min14,13=13因此由A到E的全过程的最短路径为AB2一C4D3E,最短路程长度为13。,数塔问题有形如图所示的一个数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的数值和最大。,算法设计过程如下:1.阶段划分:第一步对于第五层的数据,我们做如下决策:对经过第四层2的路径选择第五层的19,对经过第四层18的路径选择第五层的10,对经过第四层9的路径也选择第五层的10,对经过第四层5的路径选择第五层的16。,以上的决策结果将五阶数塔问题变为4阶子问题,递推出第四层与第五层的和为:21(2+19),28(18+10),19(9+10),21(5+16)。用同样的方法还可以将4阶数塔问题,变为3阶数塔问题。最后得到的1阶数塔问题,就是整个问题的最优解。,2存储、求解:1)原始信息存储原始信息有层数和数塔中的数据,层数用一个整型变量n存储,数塔中的数据用二维数组data,存储成如下的下三角阵:9121510682189519710416,2)动态规划过程存储用二维数组d存储各阶段的决策结果。二维数组d的存储内容如下:dnj=datanjj=1,2,n;dij=max(di+1j,di+1j+1)+dataiji=n-1,n-2,1,j=1,2,i;最后d11存储的就是问题的结果。,数组data数组d95912155049106838342921895212819211971041619710416数塔及动态规划过程数据,输出data119b=d11-data11=59-9=50b与d21,d22比较,b与d21相等输出data2112b=d21-data21=50-12=38b与d31,d32比较b与d31相等输出data3110b=d31-data31=38-10=28b与d41,d42比较b与d42相等输出data4218b=d42-data42=28-18=10b与d52,d53比较b与d53相等输出data5310“,3)最优解路径求解及存储,为了设计简洁的算法,用三维数组a50503存储以上确定的三个数组的信息。a50501代替数组data,a50502代替数组d,a50503记录解路径。,for(i=n-1;i=1;i-)for(j=1;jai+1j+12)aij2=aij2+ai+1j2;aij3=0;elseaij2=aij2+ai+1j+12;aij3=1;,cout;j=j+aij3;coutC4D3E,最短路程长度为13。,多段图的最短路径问题的填表形式。用一个数组costn作为存储子问题解的表格,costi表示从顶点i到终点n-1的最短路径,数组pathn存储状态,pathi表示从顶点i到终点n-1的路径上顶点i的下一个顶点。则:costi=mincij+costj(ijn且顶点j是顶点i的邻接点)(式3.5)pathi=使cij+costj最小的j(式3.6),算法多段图的最短路径1初始化:数组costn初始化为最大值,数组pathn初始化为-1;2for(i=n-2;i=0;i-)2.1对顶点i的每一个邻接点j,根据式2.5计算costi;2.2根据式2.6计算pathi;3输出最短路径长度cost0;4.输出最短路径经过的顶点:4.1i=04.2循环直到pathi=n-14.2.1输出pathi;4.2.2i=pathi;,算法主要由三部分组成:第一部分是初始化部分,其时间性能为O(n);第二部分是依次计算各个顶点到终点的最短路径,由两层嵌套的循环组成,外层循环执行n-1次,内层循环对所有出边进行计算,并且在所有循环中,每条出边只计算一次。假定图的边数为m,则这部分的时间性能是O(m);第三部分是输出最短路径经过的顶点,其时间性能是O(n)。所以,算法6.2的时间复杂性为O(n+m)。,返回,3.2.2TSP问题,TSP问题是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。各个城市间的距离可以用代价矩阵来表示。,设s,s1,s2,sp,s是从s出发的一条路径长度最短的简单回路,假设从s到下一个城市s1已经求出,则问题转化为求从s1到s的最短路径,显然s1,s2,sp,s一定构成一条从s1到s的最短路径。如若不然,设s1,r1,r2,rq,s是一条从s1到s的最短路径且经过n-1个不同城市,则s,s1,r1,r2,rq,s将是一条从s出发的路径长度最短的简单回路且比s,s1,s2,sp,s要短,从而导致矛盾。所以,TSP问题满足最优性原理。,证明TSP问题满足最优性原理,假设从顶点i出发,令d(i,V)表示从顶点i出发经过V中各个顶点一次且仅一次,最后回到出发点i的最短路径长度,开始时,VVi,于是,TSP问题的动态规划函数为:d(i,V)=mincik+d(k,Vk)(kV)(式3.7)d(k,)=cki(ki)(式3.8),这是最后一个阶段的决策,而:d(1,2,3)=minc12+d(2,3),c13+d(3,2)d(2,1,3)=minc21+d(1,3),c23+d(3,1)d(3,1,2)=minc31+d(1,2),c32+d(2,1)这一阶段的决策又依赖于下面的计算结果:d(1,2)=c12+d(2,)d(2,3)=c23+d(3,)d(3,2)=c32+d(2,)d(1,3)=c13+d(3,)d(2,1)=c21+d(1,)d(3,1)=c31+d(1,),从城市0出发经城市1、2、3然后回到城市0的最短路径长度是:d(0,1,2,3)=minc01+d(1,2,3),c02+d(2,1,3),c03+d(3,1,2),而下式可以直接获得(括号中是该决策引起的状态转移):d(1,)=c10=5(10)d(2,)=c20=6(20)d(3,)=c30=3(30),再向前倒推,有:d(1,2)=c12+d(2,)=2+6=8(12)d(1,3)=c13+d(3,)=3+3=6(13)d(2,3)=c23+d(3,)=2+3=5(23)d(2,1)=c21+d(1,)=4+5=9(21)d(3,1)=c31+d(1,)=7+5=12(31)d(3,2)=c32+d(2,)=5+6=11(32)再向前倒退,有:d(1,2,3)=minc12+d(2,3),c13+d(3,2)=min2+5,3+11=7(12)d(2,1,3)=minc21+d(1,3),c23+d(3,1)=min4+6,2+12=10(21),d(3,1,2)=minc31+d(1,2),c32+d(2,1)=min7+8,5+9=14(32)最后有:d(0,1,2,3)=minc01+d(1,2,3),c02+d(2,1,3),c03+d(3,1,2)=min3+7,6+10,7+14=10(01)所以,从顶点0出发的TSP问题的最短路径长度为10,路径是01230。,假设n个顶点用0n-1的数字编号,首先生成1n-1个元素的子集存放在数组V2n-1中,设数组dn2n-1存放迭代结果,其中dij表示从顶点i经过子集Vj中的顶点一次且仅一次,最后回到出发点0的最短路径长度。,动态规划法求解TSP问题的填表过程,算法TSP问题1for(i=1;in;i+)/初始化第0列di0=ci0;2for(j=1;jVi-1j)xi=1;j=j-wi;elsexi=0;returnVnC;/返回背包取得的最大价值,在算法中,第一个for循环的时间性能是O(n),第二个for循环的时间性能是O(C),第三个循环是两层嵌套的for循环,其时间性能是O(nC),第四个for循环的时间性能是O(n),所以,算法6.3的时间复杂性为O(nC)。,返回,3.3.2最长公共子序列问题,对给定序列X=(x1,x2,xm)和序列Z=(z1,z2,zk),Z是X的子序列当且仅当存在一个严格递增下标序列(i1,i2,ik),使得对于所有j=1,2,k,有zj=xij(1ijm)。给定两个序列X和Y,当另一个序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。最长公共子序列问题就是在序列X和Y的公共子序列中查找长度最长的公共子序列。,证明最长公共子序列问题满足最优性原理。设序列X=x1,x2,xm和Y=y1,y2,yn的最长公共子序列为Z=z1,z2,zk,记Xk为序列X中前k个连续字符组成的子序列,Yk为序列Y中前k个连续字符组成的子序列,Zk为序列Z中前k个连续字符组成的子序列,显然有下式成立:(1)若xm=yn,则zk=xm=yn,且Zk-1是Xm-1和Yn-1的最长公共子序列;(2)若xmyn且zkxm,则Z是Xm-1和Y的最长公共子序列;(3)若xmyn且zkyn,则Z是X和Yn-1的最长公共子序列。可见,两个序列的最长公共子序列包含了这两个序列的前缀序列的最长公共子序列。,要找出序列X=x1,x2,xm和Y=y1,y2,yn的最长公共子序列,可按下述递推方式计算:当xm=yn时,找出Xm-1和Yn-1的最长公共子序列,然后在其尾部加上xm即可得到X和Y的最长公共子序列;当xmyn时,必须求解两个子问题:找出Xm-1和Y的最长公共子序列以及Xm和Yn-1的最长公共子序列,这两个公共子序列中的较长者即为X和Y的最长公共子序列。用Lij表示子序列Xi和Yj的最长公共子序列的长度,可得如下动态规划函数:L00=Li0=L0j=0(1im,1jn)(式3.14)(式3.15),由此,把序列X=x1,x2,xm和Y=y1,y2,yn的最长公共子序列的搜索分为m个阶段,第1阶段,按照式3.15计算X1和Yj的最长公共子序列长度L1j(1jn),第2阶段,按照式3.15计算X2和Yj的最长公共子序列长度L2j(1jn),依此类推,最后在第m阶段,计算Xm和Yj的最长公共子序列长度Lmj(1jn),则Lmn就是序列Xm和Yn的最长公共子序列的长度。,为了得到序列Xm和Yn具体的最长公共子序列,设二维表Sm+1n+1,其中Sij表示在计算Lij的过程中的搜索状态,并且有:,(式3.16),若Sij=1,表明ai=bj,则下一个搜索方向是Si-1j-1;若Sij=2,表明aibj且Lij-1Li-1j,则下一个搜索方向是Sij-1;若Sij=3,表明aibj且Lij-1Li-1j,则下一个搜索方向是Si-1j。,(a)长度矩阵L(b)状态矩阵S,例:序列X=(a,b,c,b,d,b),Y=(a,c,b,b,a,b,d,b,b),建立两个(m+1)(n+1)的二维表L和表S,分别存放搜索过程中得到的子序列的长度和状态。,算法最长公共子序列问题intCommonOrder(intm,intn,intx,inty,intz)for(j=0;j=Li-1j)Lij=Lij-1;Sij=2;elseLij=Li-1j;Sij=3;i=m;j=n;k=Lmn;for(i0,第一个for循环的时间性能是O(n);第二个for循环的时间性能是O(m);第三个循环是两层嵌套的for循环,其时间性能是O(mn);第四个for循环的时间性能是O(k),而kminm,n,所以,算法6.4的时间复杂性是O(mn)。,返回,设r1,r2,rn是n个记录的集合,其查找概率分别是p1,p2,pn,最优二叉查找树(OptimalBinarySearchTrees)是以这n个记录构成的二叉查找树中具有最少平均比较次数的二叉查找树,即最小,其中pi是记录ri的查找概率,ci是在二叉查找树中查找ri的比较次数。,最优二叉查找树,3.4查找问题中的动态规划法,返回,例如,集合A,B,C,D的查找概率是0.1,0.2,0.4,0.3,(a)的平均比较次数是0.110.22+0.43+0.34=2.9,(b)的平均比较次数是0.120.21+0.42+0.33=2.1,(c)的平均比较次数是0.130.22+0.41+0.32=1.7。,将由r1,r2,rn构成的二叉查找树记为T(1,n),其中rk(1kn)是T(1,n)的根结点,则其左子树T(1,k-1)由r1,rk-1构成,其右子树T(k+1,n)由rk+1,rn构成。,证明最优二叉查找树满足最优性原理,若T(1,n)是最优二叉查找树,则其左子树T(1,k-1)和右子树T(k+1,n)也是最优二叉查找树,如若不然,假设T(1,k-1)是比T(1,k-1)更优的二叉查找树,则T(1,k-1)的平均比较次数小于T(1,k-1)的平均比较次数,从而由T(1,k-1)、rk和T(k+1,n)构成的二叉查找树T(1,n)的平均比较次数小于T(1,n)的平均比较次数,这与T(1,n)是最优二叉查找树的假设相矛盾。,设T(i,j)是由记录ri,rj(1ijn)构成的二叉查找树,C(i,j)是这棵二叉查找树的平均比较次数。虽然最后的结果是C(1,n),但遵循动态规划法的求解方法,需要求出所有较小子问题C(i,j)的值,考虑从ri,rj中选择一个记录rk作为二叉查找树的根结点,可以得到如下关系:,因此,得到如下动态规划函数:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重难点解析北师大版8年级数学上册期末试题及答案详解
- 2025年中学生安全常识测试题集
- 2025年营养师面试常见问题答案详解
- 2025年宠物店兽医初级笔试题及答案
- 2025年慈善总会笔试模拟题库及答案
- 永康雇员面试题目及答案
- 营销专业面试题目及答案
- 智能仓储物流系统2025年智能仓储系统安全风险防控报告
- 2025年数据分析师笔试高频题及备考策略解析
- 水浒传阅读考试题及答案
- 人教版六年级数学上册教案全册
- 学校生活指导老师面试问题
- 安防项目视频周界报警系统招投标书范本
- 烹饪概论高职全套教学课件
- 骨科患者的疼痛管理
- 2023年秋季国家开放大学-03593-机械制造装备及设计期末考试题带答案
- 建设用地报批服务投标方案(技术方案)
- 【公司财务风险管理问题分析国内外文献综述3000字】
- 仁爱版英语九年级(上)全册课文翻译(互译版)
- 小学学生素质教育报告单
- 《雷雨天气防雷击》课件
评论
0/150
提交评论