(算法分析设计)第3章动态规划课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《(算法分析设计)第3章动态规划课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 章动 规划 课件
- 资源描述:
-
1、12n动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题nT(n/2)T(n/2)T(n/2)T(n/2)T(n)=3n但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)计算计算Fibonacci数列的递归算法:数列的递归算法:int F(int n,int aN)if(n=
2、0)return 0;if(n=1)return 1;return F(n-1,a)+F(n-2,a);01234567890112358132134求解求解Fibonacci数数F(9)的填表过程的填表过程 如下:如下:由于计算由于计算F(n)是以计算它的两个重叠子问题是以计算它的两个重叠子问题 F(n-1)和和F(n-2)的形式来表达的,所以,可以设计一张表的形式来表达的,所以,可以设计一张表填入填入n+1个个F(n)的值的值(避免重复计算避免重复计算)。动态规划算法的基本思想 动态规划算法的基本思想动态规划算法的基本思想 其基本思想与分治算法的思想类似分而治之分而治之 对每个子问题都只计
3、算一次,不管该子问题以后是否会被用到,都将其保存到一张表中,避免每次遇到各个子问题都要重复计算答案。与分治法的不同之处 分治法子问题的个数往往是问题规模的指数函数;动态规划分解后的子问题往往不互相独立,不同的子问题的个数只是多项式量级 采用记录表的方法来保存所有已解决问题的答案 一个最优化多步决策问题适合用动态规划法求解有两个要素:动态规划算法的一般步骤动态规划算法的一般步骤动态规划算法的一般步骤找出最优解的性质,并刻画其结构特征;递归地定义最优值;以自底向上的方式计算出最优值;1.根据计算最优值时得到的信息,构造最优解;动态规划算法动态规划算法的基本步骤的基本步骤如只需要求出如只需要求出最优
4、值最优值,则步骤,则步骤4可省略;可省略;如需要求解问题的如需要求解问题的最优解最优解,则必须执行步骤,则必须执行步骤4通过应用范例学习动态规划算法设计策略。(1)矩阵连乘问题;(2)最长公共子序列;(3)最大子段和(4)凸多边形最优三角剖分;(5)多边形游戏;(6)图像压缩;(7)电路布线;(8)流水作业调度;(9)背包问题;(10)最优二叉搜索树。矩阵连乘问题矩阵连乘问题矩阵连乘问题。连乘积个矩阵的察这。矩阵连乘问题就是考是可乘的,与,其中,个矩阵给定矩阵连乘问题niinAAAnniAAAAAn.1,.,2,1.21121Ai的列数的列数=Ai+1的行数的行数)43(2(1()4)32(1
5、()43)(21()4)32(1()432(1(4321AAAAAAAAAAAAAAAAAAAAAAAA矩阵连乘满足结合律两个矩阵的相乘问题 两个矩阵的相乘问题两个矩阵的相乘问题 A为p*q的矩阵 B为q*r的矩阵 C=AB为p*r的矩阵计算C的标准算法,共需要p*q*r次数乘找不到切入点找不到切入点考察A1,A2,A3三个矩阵连乘 假定:假定:A1为为10*100的矩阵的矩阵 A2为为100*5的矩阵的矩阵 A3为为5*50的矩阵的矩阵 切入点切入点 考察不同计算次序下的计算量考察不同计算次序下的计算量不同计算次序下的计算量 计算次序一:(A1A2)A3 计算量=10*100*5+10*5*
6、50=7500次数乘次数乘 计算次序二:A1(A2A3)计算量=10*5*50+10*100*50=75000次数乘次数乘矩阵的计算量与矩阵的计算量与计算次序有关计算次序有关例例 有有4个矩阵个矩阵A,B,C,D,它们的维数分别是,它们的维数分别是:A=5010,B=1040,C=4030,D=305 连乘积连乘积ABCD共有五种加括号的方式共有五种加括号的方式(AB)C)D87500(AB)(CD)36000A(B(CD)10500(A(BC)D34500A(BC)D)16000矩阵连乘积的最优计算次序问题。所需要的数乘次数最少计算次序,矩阵连乘积该的计算次序,使得按照如何确定矩阵连乘积题:
7、矩阵连乘的最优次序问的维数为个矩阵对于给定的相继niiinAAAnippAAAAn.,.,2,1,.,21121方案1:穷举搜索法 穷举搜索法穷举搜索法 列举出所有可能的计算次序,选取其中数乘最小的计算次序;一定可以找到最优计算次序 P(n)随n的增长呈指数增长)4(211)()1()(1)()(11)(2/311nnnnnCnCnPnknPkPnnPnnk其中天天 啊啊用动态规划法求解用动态规划法求解分析最优解的结构分析最优解的结构建立递归关系建立递归关系计算最优值计算最优值构造最优解构造最优解求解步骤 分析最优解的结构分析最优解的结构 建立递归关系 计算最优值 构造最优解分析最优解的结构
8、将矩阵连乘积AiAi+1Aj记作Ai:j 把问题转化成考察把问题转化成考察A1:n的最优计算次序问题的最优计算次序问题 设计算次序在设计算次序在Ak处将矩阵断开最优,则总计处将矩阵断开最优,则总计算量为:算量为:A1:k 的计算量加上的计算量加上Ak+1:n的计算的计算量,再加上量,再加上A1:k 和和Ak+1:n相乘的计算量。相乘的计算量。l关键特征关键特征lA1:n的最优计算次序所包含的计算矩阵子链A1:k和Ak+1:n的次序也是最优的。(可用反证法证明)问题的最优解包含了其子问题的最优解问题的最优解包含了其子问题的最优解,这种性质称为最优子结构性质最优子结构性质。最优子结构性质是该问题可
9、用动态规划算法求解的第一个标志最优子结构性质是该问题可用动态规划算法求解的第一个标志A1(A2A3)|A4(A5A6)最优解:A1:6=A1:3+A4:6+A1:3*A4:6 A1:3与A4:6也必分别为最优解(计算总量最少),因为其无关;若有A1:3小于A1:3,由后两项不改变,则A1:6不是最小,故与前提矛盾;对矩阵:A1A2A3A4A5A6,可能的最优解求解步骤 分析最优解的结构 建立递归关系建立递归关系 计算最优值 构造最优解建立递归关系 递归地定义最优值。设计算Ai:j,1ij n,所需的最少数乘次数为mij则原问题的最优解为m1n 考察两种情况考察两种情况 i=j;i=j;ij;i
10、j;niiimAjiAjii,.,2,1,0:为单一矩阵时,当当i=j时当ij时jkipppjkmkimjimjimji11算时,利用最优子结构计当问题:问题:如何确定如何确定k?分析:分析:因为,因为,ikj,所以,所以k的位置只有的位置只有j-i种可能,即种可能,即ki,i+1,ji,i+1,jk k是这是这j-ij-i个位置中使计算量达到最小的位置。个位置中使计算量达到最小的位置。jipppjkmkimjijimjkijki1min01sij=ksij=kjkippp1为为Ai:k 和和Ak+1:j相乘的计算量相乘的计算量 各各mij的值给出了子问题最优解的代价。为的值给出了子问题最优解
11、的代价。为了帮助跟踪构造最优解,定义了帮助跟踪构造最优解,定义sij为使为使mij取最优值时对应的取最优值时对应的k值值。mij=0+mi+1j+pi-1*pi*pj;for(k=i+1;k j;k+)t=mik+mk+1j+pi-1*pk*pj;if(t m12,m23,m34,m45,m56 m13,m24,m35,m46 m14,m25,m36 m15,m26 m16A1A2A3A4A5A63035351515551010202025113752010350437555427125205351000262554 3213000201535250005322min52541531521pp
12、pmmpppmmpppmmm计算矩阵连乘积计算矩阵连乘积A1A2A3A4A5A6712531 2 3 4 5 6 123456ij0 15750 7875 9375 11875 15125 0 2625 4375 7125 10500 0 750 2500 53750 1000 3500 0 5000 0mij123456ij1 2 3 4 5 6 0 1 1 3 3 3 0 2 3 3 3 0 3 3 3 0 4 5 0 5 0sij计算结果void MatrixChain(int*p,int n,int*m,int*s)for(j=2;j=1;i-)mij=mi+1j+pi-1*pi*pj
13、;sij=i;for(k=i+1;k j;k+)t=mik+mk+1j+pi-1*pk*pj;if(t mij)mij=t;sij=k;/算法的计算时间上界为算法的计算时间上界为O(n3)*p 存放存放Ai的维数;的维数;*m 存放最优值;存放最优值;*s 存放断开位置,用于递归地构造存放断开位置,用于递归地构造相应的最优解。相应的最优解。算法复杂性分析优于穷举搜索方法算法的占用空间为算法的计算时间上界为。重循环的总次数为,循环体内的计算量为重循环。的和于对算法的主要计算量取决)()()(3)1(3,233nOnOnkir求解步骤 分析最优解的结构 建立递归关系 计算最优值 构造最优解构造最优
14、解构造最优解 构造最优解构造最优解 利用算法实现过程中保存在sij中的分割点信息来重构最优解 sij中的数k表明计算矩阵Ai:j的最佳方式应在矩阵Ak和Ak+1断开,即最优加括号方式为(Ai:k)(Ak+1:j)(Ai:k)(Ak+1:j)/根据计算出的断点矩阵根据计算出的断点矩阵s指示的加括号方式,指示的加括号方式,输出计算输出计算Ai:j的最优先次序。的最优先次序。void Traceback(int i,int j,int*s)if(i=j)return;Traceback(i,sij,s);Traceback(sij+1,j,s);coutisij“;”sij+10)return mi
15、j;if(i=j)return 0;mij=LookupChain(i+1,j)+pi-1*pi*pj;sij=i;for(k=i+1;kj;k+)t=LookupChain(i,k)+LookupChain(k+1,j)+pi-1*pk*pj;if(tmij)mij=t;sij=k;mij=u;return u;备忘录方法的复杂性分析。其子问题规模为仍为性备忘录方法的算法复杂同动态规划算法相似,)(),(23nnO两种方法应用方面的考虑 当一个问题的所有子问题都至少要解一次所有子问题都至少要解一次时,建议使用动态规划算法建议使用动态规划算法 动态规划算法没有任何多余计算 当子问题空间中的部分
16、子问题不需要求解部分子问题不需要求解时,建议使用备忘录方法建议使用备忘录方法 从其控制结构可以看出,该方法只求解那些需要求解的子问题最长公共子序列最长公共子序列51破译密码时,往往需要对比不同密码串的共同序列;在生物学中,常常要比对不同有机体的DNA序列。有机体的DNA可以表示为四种碱基A,C,T,G的字符序列,可以通过序列直接的相似性来推断不同物种之间的进化关系。相似度概念可以形式化为最长公共子序列问题。公共子序列越长,相似度可以认为越高。DNA序列比对的应用:亲子鉴定;犯罪认定;52若给定序列X=x1,x2,xm,则另一序列Z=z1,z2,zk是X的子序列是指存在一个严格递增下标序列i1,
17、i2,ik使得对于所有j=1,2,k有:zj=xij。例如,序列Z=B,C,D,B是序列X=A,B,C,B,D,A,B的子序列,相应的递增下标序列为2,3,5,7。给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列公共子序列。给定2个序列X=x1,x2,xm和Y=y1,y2,yn,找出X和Y的最长公共子序列。找出一个而不是“唯一的”;公共子序列在原序列中不一定是连续的 举例举例X=A,B,C,B,D,A,B.Y=B,D,C,A,B,A.Z=B.C.AZ是是X和和Y的一个公共子序列(长度为的一个公共子序列(长度为3)*Z不是不是X和和Y的最长公共子序列的
18、最长公共子序列B,C,B,A是是X和和Y的最长公共子序列(长度为的最长公共子序列(长度为4)穷举法求解LCS LCS:longest common sequence 需要指数时间:对X的所有子序列,检查它是否是Y的子序列,并记录最长的公共序列;若X长m,X有2m个子序列;对每条子序列,检查是否是Y的子序列,需要O(n)时间,从而需要O(n2m),即指数时间来搜索。54动态规划算法求解LCS 简化算法 从最长公共子序列的长度入手。让公共子序列不断增长,使其自己成长为最长公共子序列。定义序列s的长度为|s|。策略:考虑X、Y的前缀 定义cik=|LCS(X1i,Y1,k)|,找其前缀的最长公共子序
19、列。则有cmn=|LCS(X1m,Y1n)|=|LCS(X,Y)|。5556设序列X=x1,x2,xm和Y=y1,y2,yn的最长公共子序列为Z=z1,z2,zk,则(1)若xm=yn,则zk=xm=yn,且zk-1是X1m-1 和Y1n-1的最长公共子序列。(2)若xmyn且zkxm,则Z是X1m-1和Y的最长公共子序列。(3)若xmyn且zkyn,则Z是X和y1n-1的最长公共子序列。由此可见,2个序列的最长公共子序列包含了这2个序列的前缀的最长公共子序列。因此,最长公共子序列问题具有最优子结最优子结构性质构性质。子问题的递归结构分析的递归计算过程:的最长公共子序列问题,求解YXyyyYx
20、xxXnm,.,.,2121的最长公共子序列。、,就可以得到加上后在其尾部的最长公共子序列,然、时,找出当YXyxYXyxnmnmnm)(11的最长公共子序列、长者为这两个公共子序列中较;的一个最长公共子序列、)找出(;的一个最长公共子序列、)找出(题:时,需要求解两个子问当YXYXYXyxnmnm1121公共子问题:公共子问题:计算计算Xm-1、Yn-1的最长公共子序列的最长公共子序列 定义LCS的递归解 为LCS(xm-1,y)和LCS(x,yn-1)都包含了寻找LCS(xm-1,yn-1)的子问题。LCS问题的解涉及求解最优解的值的递归式。5859由最长公共子序列问题的最优子结构性质建立
展开阅读全文