




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、动态规划法解矩阵连乘问题动态规划法解矩阵连乘问题实验内容给定n个矩阵A1,A2,其中Ai与Ai+1是可乘的,i=1,2,3n-1。我们要计算这n个矩阵的连乘积。由于矩阵乘法满足结合性,故计算矩阵连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式确定。若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则我们可依此次序反复调用2个矩阵相乘的标准算法计算出矩阵连乘积。解题思路将矩阵连乘积A(i)A(i+1)-A(j)简记为Ai:j,这里i<=j。考察计算Ai:j的最优计算次序。设这个计算次序在矩阵A(k)和A(k+1)之间将矩阵链断开,i<=k<j,则其
2、相应完全加括号方式为(A(i)A(i+1)-A(k)*(A(k+1)A(k+2)-A(j)。特征:计算Ai:j的最优次序所包含的计算矩阵子链Ai:k和Ak+1:j的次序也是最优的。矩阵连乘计算次序问题的最优解包含着其子问题的最优解。设计算Ai:j,1<=i<=j<=n,所需要的最少数乘次数mi,j,则原问题的最优值为m1,n当i=j时,Ai:j=Ai,因此,mi,i=0,i=1,2,n当i<j时,mi,j=mi,k+mk+1,j+p(i-1)p(k)p(j)这里A(i)的维数为p(i-1)*(i)(注:p(i-1)为矩阵A(i)的行数,p(i)为矩阵Ai的列数)实验实验
3、代码#include<iostream>#include<vector>usingnamespacestd;classmatrix_chainpublic:matrix_chain(constvector<int>&c)cols=c;count=cols.size();mc.resize(count);s.resize(count);for(inti=0;i<count;+i)mci.resize(count);si.resize(count);for(i=0;i<count;+i)for(intj=0;j<count;+j)mci
4、j=0;sij=0;/记录每次子问题的结果voidlookup_chain()_lookup_chain(1,count-1);min_count=mc1count-1;cout<<"min_multi_count="<<min_count<<endl;/输出最优计算次序_trackback(1,count-1);/使用普通方法进行计算voidcalculate()intn=count-1;/矩阵的个数/r表示每次宽度/i,j表示从从矩阵i到矩阵j/k表示切割位置for(intr=2;r<=n;+r)for(inti=1;i<
5、=n-r+1;+i)intj=i+r-1;/从矩阵i到矩阵j连乘,从i的位置切割,前半部分为0mcij=mci+1j+colsi-1*colsi*colsj;sij=i;for(intk=i+1;k<j;+k)inttemp=mcik+mck+1j+colsi-1*colsk*colsj;if(temp<mcij)mcij=temp;sij=k;/fork/fori/forrmin_count=mc1n;cout<<"min_multi_count="<<min_count<<endl;/输出最优计算次序_trackback(
6、1,n);private:int_lookup_chain(inti,intj)/该最优解已求出,直接返回if(mcij>0)returnmcij;if(i=j)return0;/不需要计算,直接返回/下面两行计算从i到j按照顺序计算的情况intu=_lookup_chain(i,i)+_lookup_chain(i+1,j)+colsi-1*colsi*colsj;sij=i;for(intk=i+1;k<j;+k)inttemp=_lookup_chain(i,k)+_lookup_chain(k+1,j)+colsi-1*colsk*colsj;if(temp<u)u=
7、temp;sij=k;mcij=u;returnu;void_trackback(inti,intj)if(i=j)return;_trackback(i,sij);_trackback(sij+1,j);cout<<i<<","<<sij<<""<<sij+1<<","<<j<<endl;private:vector<int>cols;/列数intcount;/矩阵个数+1vector<vector<int>
8、>mc;/从第i个矩阵乘到第j个矩阵最小数乘次数vector<vector<int>>s;/最小数乘的切分位置intmin_count;/最小数乘次数;intmain()/初始化constintMATRIX_COUNT=6;vector<int>c(MATRIX_COUNT+1);c0=30;c1=35;c2=15;c3=5;c4=10;c5=20;c6=25;matrix_chainmc(c);/mc.calculate();mc.lookup_chain();return0;实验结果hij«i_mai111wiIl.J1JX彳AJFVk:11iLHI111-:VE.IllI:!£.HIIUK实验验证连乘矩阵假如为A1A2A3A4A5A630x3535>151555Z010x2020.25从m可知最小连乘次数为m16=15125从s可知计算顺序为(A1(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度直播平台虚拟礼物开发与交易服务合同范本
- 2025年度源代码保密协议书-新能源技术研发合作专用版
- 2025年度证券投资财务规划与咨询协议
- 2025年度房产维修基金管理服务合同-@-1
- 2025年度废弃塑料回收利用技术研发协议
- 预见行业变化的应对计划
- 开展生物学科研讨会的计划
- 教学日常检查与评估机制计划
- 患者膳食管理经验与总结计划
- 协助学生进行自我评估的计划
- 沪科版八年级物理知识点总结
- 2024员工质量意识培训
- 孙权劝学(原卷版)-2024年中考语文之文言文对比阅读
- 养生馆拓客培训
- 《大学计算机基础》第2章计算机系统组成
- 失业保险待遇申领表
- 期末测试卷(一)(试题)2023-2024学年二年级上册数学苏教版
- 2024年广东省初中学业水平考试中考英语试卷(真题+答案解析)
- DL-T-255-2012燃煤电厂能耗状况评价技术规范
- 家庭教育家长会教案及反思(3篇模板)
- 人教版PEP英语单词表三年级到六年级
评论
0/150
提交评论