算法设计与分析动态规划第四章精.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《算法设计与分析动态规划第四章精.ppt》由会员分享,可在线阅读,更多相关《算法设计与分析动态规划第四章精.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法设计与分析动态规划第四章2023/2/20计算机算法设计与分析1第1页,本讲稿共58页2023/2/20计算机算法设计与分析2矩阵连乘问题给定n个矩阵:A1,A2,An,其中Ai与Ai+1是可乘的。确定一种连乘的顺序,使得矩阵连乘的计算量为最小。设A和B分别是pq和qr的矩阵,则乘积C=AB为pr的矩阵,计算量为pqr次数乘。但是对于多于2个以上的矩阵连乘,连乘的顺序却非常重要,因为不同的顺序的总计算量将会有很大的差别。第2页,本讲稿共58页2023/2/20计算机算法设计与分析3不同计算顺序的差别设矩阵A1,A2和A3分别为10100,1005和550的矩阵,现要计算A1A2A3。若按(
2、A1A2)A3)来计算,则需要的数乘次数为101005+10550=7500若按(A1(A2 A3)来计算,则需要的数乘次数为100 5 50+1010050=75000两种计算顺序的计算量竟然相差两种计算顺序的计算量竟然相差10倍!倍!计算顺序通计算顺序通过加括号来过加括号来实现实现第3页,本讲稿共58页2023/2/20计算机算法设计与分析4不同计算顺序的数量设n个矩阵的连乘有P(n)个不同的计算顺序。先在第k个和第k+1个矩阵之间将原矩阵序列分成两个矩阵子序列,k=1,n;再分别对两个子序列完全加括号,最后对结果加括号,便得到原序列的一种完全加括号方式。第4页,本讲稿共58页2023/2
3、/20计算机算法设计与分析5不同计算顺序的数量设n个矩阵的连乘有P(n)个不同的计算顺序。由此可得出关于P(n)的递归式:P(n)=1 n=1 n1P(k)P(nk)n1 k=1 解此递归方程可得P(n)=C(n1),其中C(n)=1 n+12n n=(4n/n3/2)P(n)随n的增长呈指数增长。第5页,本讲稿共58页2023/2/20计算机算法设计与分析6分解最优解的结构将AiAi+1Aj的矩阵连乘问题记为Ai:j。设A1:n 的一个最优解是在Ak和Ak+1处断开的,即A1:n=(A1:k Ak+1:n),则A1:k和Ak+1:n也分别是其最优解。否者,若有A1:k的一个计算次序的计算量更
4、少的话,则用此计算次序替换原来的次序,则得到A1:n一个更少计算量。矛盾。同理Ak+1:n也是最优解。第6页,本讲稿共58页2023/2/20计算机算法设计与分析7最优子结构性质A1A2An的矩阵连乘问题,即A1:n,的最优解中的子问题A1:k和Ak+1:n的解也是该子问题的最优解。最优子结构性质:如果某问题的每个最优最优子结构性质:如果某问题的每个最优解中的子问题的解也是最优的,则称该问解中的子问题的解也是最优的,则称该问题具有最优子结构性质。题具有最优子结构性质。换言之,满足最优子结构性质的问题的最优解是由子问题的最优解构成的。第7页,本讲稿共58页2023/2/20计算机算法设计与分析8
5、建立递归关系令mij,1i,jn,为计算Ai,j 的最少数乘次数,则原问题为m1n。当i=j时,Ai,j为单一矩阵,mij=0;当ij时,利用最优子结构性质有:mij=minmik+mk+1j+pi1pkpjikj其中矩阵Ai,1in,的维数为pi1pi。只需数组Pn+1就可存放各矩阵的行列数。注意:因为这注意:因为这n个矩阵可乘,故后一个矩阵的个矩阵可乘,故后一个矩阵的行数就是一个矩阵的列数。行数就是一个矩阵的列数。P0为为A1的行数的行数,P1为为A1的列数,也是的列数,也是A2的行数的行数,以此类推。最以此类推。最后的后的Pn是是An的列数。的列数。第8页,本讲稿共58页2023/2/2
6、0计算机算法设计与分析9递归的执行过程该递归自顶向下地执行,如A1:4计算:1:41:12:41:23:41:34:42:23:42:34:41:12:23:34:41:12:31:23:33:34:42:23:32:23:31:12:2第9页,本讲稿共58页2023/2/20计算机算法设计与分析10直接递归的时间复杂性根据该递归式不难得出的时间复杂性为 n11+(T(k)+T(nk)+1)k=1 T(n)n1=1+(n 1)+(T(k)+T(nk)k=1 n1 n1=n+T(k)+T(nk)k=1 k=1 该递归算法的时间复杂性为O(2n)。n1 =n+2T(k)k=1 用数学归用数学归纳法
7、可证纳法可证T(n)2n1=O(2n)。第10页,本讲稿共58页2023/2/20计算机算法设计与分析11递归的执行过程在此递归的执行中有大量重复计算:1:41:12:41:23:41:34:42:23:42:34:41:12:23:34:41:12:31:23:33:34:42:23:32:23:31:12:2红色的都是红色的都是重复计算!重复计算!第11页,本讲稿共58页2023/2/20计算机算法设计与分析12子问题个数最多为O(n2)可在计算过程中保存已解子问题的答案。这样,每个子问题只要计算一次,而在后面需要该子问题答案时只要简单查一下,从而避免了重复计算。计算方式可从最简单的子问题
8、开始,依据递归式自底向上地进行。此问题中不同有序对(i,j)就对应不同子问题,故子问题个数最多有C +n=O(n2)个。n2第12页,本讲稿共58页2023/2/20计算机算法设计与分析13自底向上的计算例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下:m11m22m33m44m12m23m34m13m24m14其中mii=0mii+1=pi1pipi+1mij=minikj mik+mk+1j+pi1pkpj最简单情况是单个最简单情况是单个矩阵的计算。矩阵的计算。第13页,本讲稿共58页2023/2/20计算机算法设计与分析14自底向上的计算例如对于A1A2A
9、3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下:m11m22m33m44m12m23m34m13m24m14mii=0mii+1=pi1pipi+1例如:m13=min m11+m23+p0p1p3m12+m33+p0p2p3第14页,本讲稿共58页2023/2/20计算机算法设计与分析15自底向上的计算例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下:m11m22m33m44m12m23m34m13m24m14mii=0mii+1=pi1pipi+1例如:m14=m11+m24+p0p1p4m12+m34+p0p2p4m13+m44+p0p3p
10、4min 第15页,本讲稿共58页2023/2/20计算机算法设计与分析16自底向上的计算例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下:m11m22m33m44m12m23m34m13m24m14这层的断点为这层的断点为0个个。这层的断点为这层的断点为1个个。这层的断点为这层的断点为2个个。这层的断点为这层的断点为3个。个。第16页,本讲稿共58页2023/2/20计算机算法设计与分析17矩阵连乘算法给矩阵连乘算法取个名字MatrixChain。第17页,本讲稿共58页2023/2/20计算机算法设计与分析18矩阵连乘算法MatrixChain(形参表)初始
11、化;自底向上地计算每一个mij并将结果填入表中。底是底是mii,即对角线元素。,即对角线元素。最顶层是最顶层是m1n。初始化是将初始化是将mii,即对角线,即对角线元素,赋值为元素,赋值为0。第18页,本讲稿共58页2023/2/20计算机算法设计与分析19矩阵连乘算法的数据结构形参表中应有n和Pn+1。算法需要两个二维数组:二维矩阵mnn。其每个元素mij,1i,jn,为Ai,j 的最少数乘次数。二维矩阵snn,其元素sij,1i,jn,为计算Ai,j 的断点位置。第19页,本讲稿共58页2023/2/20计算机算法设计与分析20矩阵连乘算法MatrixChain(n,Pn+1)初始化:将初
12、始化:将mii 赋值为赋值为0。for(i=1;i=n;i+)mii=0;第20页,本讲稿共58页2023/2/20计算机算法设计与分析21矩阵连乘算法MatrixChain(n,Pn+1)for(i=1;i=n;i+)mii=0;for(r=2;r=n;r+)for(i=1;i=n r+1;i+)j=i+r 1;for(k=i;k j;k+)t=mik+mk+1j+pi1*pk*pj;if(t mij)mij=t;sij=k;从第二层开始,对从第二层开始,对(i,j)间的每个断点间的每个断点k,计算,计算mi,j=mi:kmk+1:j+pi1*pk*pj,并记下较小的并记下较小的mij及相应
13、的断点及相应的断点k。第21页,本讲稿共58页2023/2/20计算机算法设计与分析22矩阵连乘算法MatrixChain(n,Pn+1)for(i=1;i=n;i+)mii=0;for(r=2;r=n;r+)for(i=1;i=n r+1;i+)j=i+r 1;for(k=i;k j;k+)t=mik+mk+1j+pi1*pk*pj;if(t mij)mij=t;sij=k;当当r=2,对每个,对每个i,j为为i+1,最内层循环仅执行一,最内层循环仅执行一次,计算相邻两个矩阵的数乘次数,即次,计算相邻两个矩阵的数乘次数,即Ai,i+1=Ai,i+Ai+1,i+1+pi1*pi*pi+1。第2
14、2页,本讲稿共58页2023/2/20计算机算法设计与分析23矩阵连乘算法MatrixChain(n,Pn+1)for(i=1;i=n;i+)mii=0;for(r=2;r=n;r+)for(i=1;i=n r+1;i+)j=i+r 1;for(k=i;k j;k+)t=mik+mk+1j+pi1*pk*pj;if(t 2,每对,每对(i,j)中的断点中的断点k有有r 1个,越往个,越往高层断点数目越多。这样自底向上完成整个高层断点数目越多。这样自底向上完成整个mij的计算。的计算。第23页,本讲稿共58页2023/2/20计算机算法设计与分析24矩阵连乘算法MatrixChain(n,Pn+
15、1)for(i=1;i=n;i+)mii=0;for(r=2;r=n;r+)for(i=1;i=n r+1;i+)j=i+r 1;for(k=i;k j;k+)t=mik+mk+1j+pi1*pk*pj;if(t mij)mij=t;sij=k;第24页,本讲稿共58页2023/2/20计算机算法设计与分析25MatrixChain的运行举例MatrixChain用矩阵mij,sij存放子问题Ai:j的最小计算量以及相应的断点。123456 1 2 3 4 5 6mij1 2 3 4 5 6sij第25页,本讲稿共58页2023/2/20计算机算法设计与分析26MatrixChain的运行举例
16、MatrixChain将如下面红色箭头所示的过程逐个计算子问题Ai:j:。123456 1 2 3 4 5 6mij1 2 3 4 5 6sij第26页,本讲稿共58页2023/2/20计算机算法设计与分析27MatrixChain的运行举例123456 1 2 3 4 5 6mij1 2 3 4 5 6sij设要计算矩阵连乘积A1A2A3A4A5A6,其维数分别为3535,3515,155,510,1020,2025,即p0=35,p1=35,p2=15,p3=5,p4=10,p5=20,p6=25。第27页,本讲稿共58页2023/2/20计算机算法设计与分析28MatrixChain的运
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 动态 规划 第四
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内