![动态规划法解矩阵连乘问题_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-5/25/ccec440b-f72f-40c8-b926-81c86633c144/ccec440b-f72f-40c8-b926-81c86633c1441.gif)
![动态规划法解矩阵连乘问题_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-5/25/ccec440b-f72f-40c8-b926-81c86633c144/ccec440b-f72f-40c8-b926-81c86633c1442.gif)
![动态规划法解矩阵连乘问题_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-5/25/ccec440b-f72f-40c8-b926-81c86633c144/ccec440b-f72f-40c8-b926-81c86633c1443.gif)
![动态规划法解矩阵连乘问题_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-5/25/ccec440b-f72f-40c8-b926-81c86633c144/ccec440b-f72f-40c8-b926-81c86633c1444.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、动态规划法解矩阵连乘问题实验内容给定n个矩阵A1,A2, .An ,其中 Ai与Ai+1是可乘的, i=1,2,3 。, n-1。我们要计 算这 n 个矩阵的连乘积。 由于矩阵乘法满足结合性, 故计算矩阵连乘积可以有许多不同的计 算次序。这种计算次序可以用加括号的方式确定。若一个矩阵连乘积的计算次序完全确定, 也就是说该连乘积已完全加括号, 则我们可依此次序反复调用 2 个矩阵相乘的标准算法计算 出矩阵连乘积。解题思路将矩阵连乘积 A(i)A(i+1) A(j) 简记为 Ai:j ,这里 i = j 。考察计算 Ai:j 的最优计 算次序。设这个计算次序在矩阵 A(k) 和 A(k+1) 之间
2、将矩阵链断开, i = k j, 则其相应 完全加括号方式为 (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(
3、i) 的维数为p(i-1)*(i)( 注: p(i-1) 为矩阵 A(i) 的行数, p(i) 为矩阵 Ai 的列数 ) 实验 实验代码#include #include using namespace std ;class matrix_chainpublic:matrix_chain(const vector & c) cols = c ;count = cols.size () ;mc.resize (count) ;s.resize (count) ;for (int i = 0; i count; +i) mci.resize (count) ; si.resize (count)
4、;for (i = 0; i count; +i) for (int j = 0; j count; +j) mcij = 0 ; sij = 0 ;/ 记录每次子问题的结果void lookup_chain () _lookup_chain (1, count - 1) ;min_count = mc1count - 1 ;cout min_multi_count = min_count endl ;/ 输出最优计算次序_trackback (1, count - 1) ;/ 使用普通方法进行计算void calculate () int n = count - 1; / 矩阵的个数/ r
5、表示每次宽度/ i,j 表示从从矩阵 i 到矩阵 j/ k 表示切割位置for (int r = 2; r = n; + r) for (int i = 1; i = n - r + 1; + i) int j = i + r - 1 ;/ 从矩阵 i 到矩阵 j 连乘,从 i 的位置切割,前半部分为 0 mcij = mci+1j + colsi-1 * colsi * colsj ;sij = i ;for (int k = i + 1; k j; + k) int temp = mcik + mck + 1j + colsi-1 * colsk * colsj ;if (temp mci
6、j) mcij = temp ; sij = k ; / for k / for i / for rmin_count = mc1n ;cout min_multi_count = min_count 0) return mcij ;if (i = j) return 0 ;/ 不需要计算,直接返回/ 下面两行计算从 i 到 j 按照顺序计算的情况int u = _lookup_chain (i, i) + _lookup_chain (i + 1, j)+ colsi-1 * colsi * colsj ;sij = i ;for (int k = i + 1; k j; + k) int
7、temp = _lookup_chain(i, k) + _lookup_chain(k + 1, j)+ colsi - 1 * colsk * colsj ;if (temp u) u = temp ;sij = k ;mcij = u ;return u ;void _trackback (int i, int j) if (i = j) return ;_trackback (i, sij) ;_trackback (sij + 1, j) ;cout i , sij sij + 1 , j endl;private:vector cols ; / 列数int count ; / 矩阵
8、个数 + 1vectorvector mc; / 从第 i 个矩阵乘到第 j 个矩阵最小数乘次数 vectorvector s; / 最小数乘的切分位置int min_count ; / 最小数乘次数 ;int main()/ 初始化const int MATRIX_COUNT = 6 ;vector c(MA TRIX_COUNT + 1) ;c0 = 30 ;c1 = 35 ;c2 = 15 ;c3 = 5 ;c4 = 10 ;c5 = 20 ;c6 = 25 ;matrix_chain mc (c) ; / mc.calculate () ; mc.lookup_chain () ; return 0 ;实验结果实验验证 连乘矩阵假如为:计算过程为:从 m 可知最小连乘次数为m16 = 15125从 s 可知计算顺序为 (A1(A2A3)(A4A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金融服务居间合同委托书
- 物业服务外包合同
- 锅炉购销合同书
- 车辆租赁保险服务合同
- 语言编程及算法操作手册
- 水产养殖与渔业技术作业指导书
- 软件外包业软件开发与项目管理流程优化研究
- 绿色农业生产技术方案
- 保姆雇佣劳动合同书
- 新夫妻离婚协议书参考样板
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 每个孩子都能像花儿一样开放
- 单店爆破促销活动模式精编文档
- YS/T 34.1-2011高纯砷化学分析方法电感耦合等离子体质谱法(ICP-MS)测定高纯砷中杂质含量
- LY/T 2016-2012陆生野生动物廊道设计技术规程
- 松下panasonic-视觉说明书pv200培训
- 单县烟草专卖局QC课题多维度降低行政处罚文书出错率
- 毫针刺法(全)教学课件
- 金风科技-风电产业集团-供应商现场作业基础安全考试附答案
- 人工智能机器人科学小报手抄报简报
- 三年级下册美术课件-第1课 灯彩辉映|浙美版 (共19张PPT)
评论
0/150
提交评论