矩阵相乘的最优顺序

对于一个矩阵,进行乘法的顺序不一样,总的元素的乘法次数也不同。我们希望给出一系列矩阵之后,能找到元素乘法次数最少的计算顺序。

用动态规划来求解这个问题。


/* * ===================================================================================== * * Filename: MatrixMul.cpp * * Description: * * Version: 1.0 * Created: 2011年12月01日 10时43分13秒 * Revision: none * Compiler: gcc * * Author: MaZheng (blog.csdn.net/mazheng1989), mazheng19891019@gmail.com * Company: Dalian University Of Technology * * ===================================================================================== */ #include<stdio.h> const int n=4; int Matrix[n][2]={20,2,2,15,15,40,40,4}; int cost[n][n]; int root[n][n]; int Proc(int i,int r,int j) { return Matrix[i][0]*Matrix[r][1]*Matrix[j][1]; } int pri(int i,int r,int j) { if(i==r&&r==j) return -1; pri(i,root[i][r],r); pri(r+1,root[r+1][j],j); printf(" %d ",root[i][j]+1); } int main() { for(int i=n-1;i>=0;i--) { for(int j=i;j<=n-1;j++) { if(j==i) { cost[i][j]=0; root[i][j]=i; continue; } for(int r=i;r<=j-1;r++) { int temp=cost[i][r]+cost[r+1][j]+Proc(i,r,j); if(cost[i][j]==0) { cost[i][j]=temp; root[i][j]=r; } else if(cost[i][j]!=0&&cost[i][j]>=temp) { cost[i][j]=temp; root[i][j]=r; } } // printf("%d %d %d %d \n",i+1,j+1,cost[i][j],root[i][j]+1); } } printf("least multiply times = %d\n",cost[0][n-1]); printf("compute sequece is:\n"); pri(0,root[0][n-1],n-1); }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值