

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、问题描述:给定n个矩阵:Ai,A2,.,An,其中A与Ai+i是可乘的,i=1,2.,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积 需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。问题解析:由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有 许多不同的计算次序。这种计算次序可以用加括号的方式来确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号, 则可以依此次序反复调用2个矩阵相乘的标准 算法计算出矩阵连乘积。完全加括号的矩阵连乘积可递归地定义为:(1) 单个矩阵是完全加括号的;(2)矩阵连乘积A是完全
2、加括号的,则A可表示为2个完全加括 号的矩阵连乘积B和C的乘积并加括号,即A=(BC)例如,矩阵连乘积A1A2A3A4有5种不同的完全加括号的方式:(AI(A2(A3A4),(AI(A2A3)A4),(AiA2)(A3A4),(Ai(A2A3)A4),(AlA2)A3)A4)。每一种完全加括号的方式对应于一个矩阵连乘积的计算 次序,这决定着作乘积所需要的计算量。看下面一个例子,计算三个矩阵连乘A1,A2,A3;维数分别为10*100 ,100*5,5*50按此顺序计算需要的次数(Ai*A2)*A3):10X100X5+10X5X50=7500次,按此顺序计算需要的次数(AI*(A2*A3):1
3、0*5*50+10*100*50=75000次所以问题是:如何确定运算顺序,可以使计算量达到最小化。算法思路:例:设要计算矩阵连乘乘积A1A2A3A4A5A6,其中各矩阵的维数分 别是:A1:30*35;A:35*15;A:15*5;A4:5*10;A5:10*20;A6:20*25递推关系:设计算Ai:j,1ij,弓所需要的最少数乘次数mi,j,则原问题的 最优值为m1, n。当i=j时,Ai:j=Ai,因此,mii=0,i=1,2,n当ij时,若Ai:j的最优次序在Ak和Ak+1之间断开,i=kj,则:mij=mik+mk+1j+p /pkpj。由于在计算是并不知道断开点k的位置,所以k还
4、未定。不过k的位置只有j-i个可能。因此,k是这j-i个 位置使计算量达到最小的那个位置。综上,有递推关系如下:oi = j幽斶闪+吨+1J+阳叭iusing n amespace std;const int L = 7;int RecurMatrixChai n(int i,i nt j,i nt *s,i nt *p);/递归求最优解void Traceback(i nt i,i nt j,i nt *s);/构造最优解int mai n()int pL=30,35,15,5,10,20,25;int *s = new int *L;for(i nt i=0;iL;i+)si = new
5、in tL;coutvv矩阵的最少计算次数为:vvRecurMatrixChain(1,6,s,p)endl;coutvv矩阵最优计算次序为: “1JS-1(T(k) + T(n-幻 +0(1)n 1fl-lw-LT(n) (?() +肋丁辽一丁辽一k) =0(打)+:7用数学归纳法可以证明RecurMatrixChain的计算时间也随n指数增长。3、备忘录递归算法1:22:23:34:4#4 妙2:3void Traceback(i nt i,i nt j,i nt *s); 构造最优解若记录项中存储的是初始化时存入的特殊值, 则表示该问题是 第一次遇到,此时计算出该子问题的解,并将其保存在
6、相应的 记录项中,以备以后查看。若记录项中存储的已不是初始化时 存入的特殊值,贝y表示该子问题已被计算过,相应的记录项中 存储的是该子问题的解答。此时从记录项中取出该子问题的解 答即可,而不必重新计算。3d1-2 矩阵连乘备忘录递归实现/A1 30*35 A2 35*15 A3 15*5 A4 5*10 A5 10*20 A6 20*25p0-6=30,35,15,5,10,20,25#i nclude stdafx.h#in clude using n amespace std;const int L = 7;int LookupCha in (i nt i,i nt j,i nt *m,i
7、 nt *s,i nt *p);int MemoizedMatrixChai n(int n,i nt *m,i nt *s,i nt *p);int main()int pL=30,35,15,5,10,20,25;8.备忘录方法用表格保存已解决的子问题答案,在下次需要解决此子问题时,只要简单查看该子问题的解答,而不必重新计算。备忘录方法为每一个子问题建立一个记录项,初始化时,int *s = new int *L;int *m = new int *L;for(int i=0;iL;i+)si = new intL;mi = new intL;cout 矩阵的最少计算次数为: Memoiz
8、edMatrixChain(6,m,s,p)endl;cout 矩阵最优计算次序为: endl;Traceback(1,6,s);return 0;int MemoizedMatrixChain(int n,int *m,int *s,int *p)for(int i=1; i=n; i+)for(int j=1; j0)return mij;if(i=j)return 0;int u = LookupChain(i,i,m,s,p) + LookupChain(i+1,j,m,s,p)+pi-1*pi*pj;sij=i;for(int k=i+1; kj; k+)int t = Lookup
9、Chain(i,k,m,s,p) + LookupChain(k+1,j,m,s,p) + pi-1*pk*pj;if(tu)u=t;sij = k;mij = u;return u;void Traceback(int i,int j,int *s)if(i=j) return;Traceback(i,sij,s);Traceback(sij+1,j,s);coutMultiply Ai,sij;cout and A(sij+1),j0,则表示其中存void Traceback(i nt i,i nt j,i nt *s); 构造最优解储的是所要求子问题的计算结果,直接返回即可。否则与直接递
10、归算法一样递归计算, 并将计算结果存入mij中返回。 备忘录算法耗时0 (n八3),将直接递归算法的计算时间从2An降至0(n八3)。3、动态规划迭代实现用动态规划迭代方式解决此问题,可依据其递归式自底向上的方式进行计算。在计算过程中,保存已解决的子问题的答案。每个子问题只计算一次,而在后面需要时只需简单检查一下,从而避免了大量的重复计算,最终得到多项式时间的算法。3d1-2 矩阵连乘动态规划迭代实现/A1 30*35 A2 35*15 A3 15*5 A4 5*10 A5 10*20 A6 20*25p0-6=30,35,15,5,10,20,25#i nclude stdafx.h#in
11、clude using n amespace std;const int L = 7;int MatrixChai n(int n,i nt *m,i nt *s,i nt *p);int main()int pL=30,35,15,5,10,20,25;int *s = new int *L; int *m = new int *L; for(int i=0;iL;i+)si = new intL; mi = new intL;cout 矩阵的最少计算次数为: MatrixChain(6,m,s,p)endl;cout 矩阵最优计算次序为: endl;Traceback(1,6,s);ret
12、urn 0;int MatrixChain(int n,int *m,int *s,int *p)for(int i=1; i=n; i+)mii = 0;for(int r=2; r=n; r+) /r 为当前计算的链长(子问题规模)for(int i=1; i=n-r+1; i+)/n-r+1 为最后一个 r 链的前边界int j = i+r-1;/计算前边界为 r,链长为 r 的链的后边界mij = mi+1j + pi-1*pi*pj; 将链 ij 划分为 A(i) * ( Ai+1:j) sij = i;for(int k=i+1; kj; k+)/将链 ij 划分为 ( Ai:k
13、)* (Ak+1:j)int t = mik + mk+1j + pi-1*pk*pj;if(tmij)mij = t;sij = k;return m1L-1;void Traceback(i nt i,i nt j,i nt *s)if(i=j) return;Traceback(i,sij,s);Traceback(sij+1,j,s);coutMultiply Ai,sij;cout and A(sij+1),jendl;上述迭代算法的运行过程如下图所示:Al A2 A3 A4 A5血血R=2*J+JRT-_R=4, _*R爭- _R=&-如图所示:当R=2时,先迭代计算出:m1:2=m1:1+m2:2+p0*p1*p2;m2:3=m2:2+m3:3+p1*p2*p3;m3:4=m3:3+m44+p2*p3*p4;m4:5=m4:4+m55+p3*p4*p5;m5:6=m55+m66+p4*p5*p6的值;当R=3时,迭代计算出:m1:3=mi n( m1:1+m2:3+p0*p1*p3,m1:2+m3:3+p0*p2*p3);m2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修公司物业费营销方案
- 施工现场环境管理实施方案及措施
- 2025年康复工程学院康复辅助器具的选用与配置及答案解析
- 2024-2025学年邮政行业职业技能鉴定试题【历年真题】附答案详解
- 2025隧道专项试题及答案
- 2024-2025学年度计算机二级题库及完整答案详解(全优)
- 2025公务员(省考)常考点试卷完整答案详解
- 2025美容化妆人员考前冲刺测试卷(夺冠)附答案详解
- 2024全国统考教师资格考试《教育教学知识与能力(小学)》高分题库含答案详解【突破训练】
- 药店相关技能鉴定自我提分评估附答案详解【B卷】
- 中队辅导员培训材料
- (高清版)DB12∕T 934-2020 公路工程资料管理技术规程
- 深度解析Palantir介绍
- 木方回收合同6篇
- 《探寻抗日战争历史》课件
- 2025年第三届药膳大赛(选拔赛)理论知识考试题(附答案)
- 玻璃幕墙维修保养施工方案
- 亲子关系断绝协议书范文模板
- 包装行业安全防范总结
- 临床骨筋膜室综合征护理业务学习
- 2025年南充房地产市场分析报告
评论
0/150
提交评论