矩阵连乘问题
#include<iomanip>
using namespace std;
void MatrixChain(int *p,int n,int **m,int **s)
{
for(int ia=1;ia<=n;ia++)
m[ia][ia] = 0;
for(int r=2;r<=n;r++)
for(int i=1;i<=n-r+1;i++)
{
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++)
{
int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
void Traceback(int ib,int j,int **s)
{
if(ib==j)
return;
Traceback(ib,s[ib][j],s);
Traceback(s[ib][j]+1,j,s);
cout<<"Multiply A"<<ib<<","<<s[ib][j];
cout<<"and A"<<(s[ib][j]+1)<<","<<j<<endl;
}
void main(void)
{
cout<<"输入你要的矩阵个数n"<<endl;
int n;
cin>>n;
int *p;//保存你要的矩阵行列
p=new int[n+1];
for(int ic=0;ic<=n;ic++)
{
char ca;
cin>>ca;
if(ca != 0)
p[ic]=static_cast <int>(ca);
else
break;
}
int **s,**m;
s=new int *[n+1];
m=new int *[n+1];
for(int a=0;a<=n;a++)
{
s[a]=new int [n+1];
m[a]=new int [n+1];
}
MatrixChain(p,n,m,s);
for(int ic=1;ic<=n;ic++)
{
for(int id=ic+1;id<=n;id++)
{
cout<<m[ic][id]<<setw(8);
}
cout<<endl;
}
cout<<m[1][n]<<endl;
//Traceback(1,n,s);
delete []p;
for(int b=0;b<=n;b++)
{
delete []s[b];
delete []m[b];
}
delete []s;
delete []m;
}
相关推荐
矩阵连乘_矩阵连乘问题_
实现计算多个矩阵连乘的最终结果并且对时间复杂度进行了优化
矩阵连乘问题(算法 代码)
小算法一个,自己感觉当时学的时候挺不错的,就保留了,发布到网上,需要的顶一下,谢谢了
Java实现矩阵连乘问题
用动态规划思想解决矩阵连乘的问题。………………………………
矩阵连乘的重叠子问题
Description 在讲动态规划课时,我们知道可用动态规划算法求解的问题应具备的一个基本要素是子问题的重叠性质,矩阵连乘问题能用动态规划求解正是因为它具有重叠子问题。因此在解矩阵连乘问题的自顶向下的递归算法中,存在着大量的重叠子问题计算。例如要计算4个矩阵A1A2A3A4最小连乘次数,要分别计算A1(A2A3A4)、(A1A2)(A3A4)和(A1A2A3)A4三种情况下的最小连乘次数,而计算A1(A2A3A4)的最小连乘次数要计算其子问题A2A3A4的最小连乘次数,A2A3A4最小连乘次数的计算有二种情况(A2A3)A4和A2(A3A4),它分别包括求A2A3和A3A4两个子问题。同理,计算(A1A2)(A3A4)包含A1A2和A3A4两个子问题;计算(A1A2A3)A4包含计算A1A2A3、A1A2和A2A3这三个子问题。故在解A1A2A3A4的最小连乘次数时,其子问题的计算和重叠次数分别是: A1A2计算2次,重叠1次;A2A3计算2次,重叠1次;A3A4计算2次,重叠1次;A1A2A3只计算1次;A2A3A4只计算1次;A1A2A3A4只计算1次。因此,4个矩阵A1A2A3A4连乘的重叠子问题分别为:A1A2、A2A3和A3A4的计算各重叠一次。现在你的编程任务是:对于n个矩阵连乘,求其重叠子问题的计算次数。 Input 第一行是1个整数n(2≤n≤300),表示有n个矩阵连乘,接下来一行有n+1个数,表示是n个矩阵的行及第n个矩阵的列,它们之间用空格隔开. Output 输出重叠子问题计算次数和对应的子问题,中间以空格隔开,各子问题的重叠次数输出分别以A1、A2、… An打头的次序依次输出,格式如样例所示。如没有重叠子问题输出NO Sample Input 4 30 35 15 5 10 Sample Output 1 A1A2 1 A2A3 1 A3A4
c++实现矩阵连乘问题
c++实现矩阵连乘问题,通过动态规划法的思想求得。



