博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵连乘
阅读量:6150 次
发布时间:2019-06-21

本文共 1219 字,大约阅读时间需要 4 分钟。

矩阵AB可乘的条件是矩阵A的列数等于矩阵B的行数

计算时,加括号方式,对计算量的影响很大

穷举搜索法:来搜索可能的计算次序,并计算出每一种计算次序相应需要的数乘次数,从中找出一种数乘最少的计算次序

                              1 分析最优解的结构                                    

关键特征:计算A[1:n]的最优次序所包含的计算矩阵子链A[1:k]和 A[k+1:n]的次序也是最优的。

                              2 建立递归关系                                          

当i=j时:m[i][j] = 0;

当i<j时,m[i][j] = m[i][k]+ m[k+1][j]+pi-1pkpj

                              3 计算最优值                                            

时间复杂度O(n^3)   空间复杂度O(n^2)

                              4 构造最优解                                            

。。。

代码:

#include
using namespace std;const int MAX = 100; //p用来记录矩阵的行列,main函数中有说明 //m[i][j]用来记录第i个矩阵至第j个矩阵的最优解 //s[][]用来记录从哪里断开的才可得到该最优解int p[MAX+1],m[MAX][MAX],s[MAX][MAX];int n;//矩阵个数 void matrixChain(){ for(int i=1;i<=n;i++) m[i][i]=0; for(int r=2;r<=n;r++)//对角线循环 for(int i=1;i<=n-r+1;i++) { //行循环 int j = r+i-1;//列的控制 //找m[i][j]的最小值,先初始化一下,令k=i m[i][j]=m[i][i]+m[i+1][j]+p[i-1]*p[i]*p[j]; s[i][j]=i; //k从i+1到j-1循环找m[i][j]的最小值 for(int k = i+1;k
>n; for(int i=0;i<=n;i++)cin>>p[i]; //测试数据可以设为六个矩阵分别为 //A1[30*35],A2[35*15],A3[15*5],A4[5*10],A5[10*20],A6[20*25] //则p[0-6]={30,35,15,5,10,20,25} //输入:6 30 35 15 5 10 20 25 matrixChain(); traceback(1,n); //最终解值为m[1][n]; cout<
<

测试结果:

本文转自博客园xingoo的博客,原文链接:,如需转载请自行联系原博主。
你可能感兴趣的文章
JavaScript -- 循环语句
查看>>
一个屌丝程序猿的人生(六十六)
查看>>
C#打开SDE数据库的几种方式总结
查看>>
Nodejs进阶:核心模块Buffer常用API使用总结
查看>>
Java 编码 UTF-8
查看>>
How to store scaling parameters for later use
查看>>
带输出參数的存储过程的定义,以及在aso.net中调用
查看>>
scp and tar
查看>>
React Native安卓项目打包发布APK步骤
查看>>
jquery源码03 (3184 , 3295) support : 功能检测
查看>>
python 穷举法 算24点(史上最简短代码)
查看>>
mysql left join 左连接查询关联n多张表
查看>>
Ext4.0 经常使用代码整理(一)
查看>>
希腊神话中的人物名称大全
查看>>
利用艺术家的整数ID映射将标签转换为向量
查看>>
asp.net mvc自动压缩文件,并生成CDN引用
查看>>
[php learn] php 从头開始学习1
查看>>
使用Docker部署Gitlab
查看>>
JAVA是否可以作脚本语言呢
查看>>
sibling
查看>>