矩阵连成问题

【作者:孟祥月  博客:http://blog.csdn.net/mengxiangyue】

给定n个矩阵{A1,A2,...,An},其中Ai与Ai+1是可乘的,i=1,2...,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。

#include<iostream>

using namespace std;

int p[]={30,35,15,5,10,20,25};

int n = 6;

int m[7][7];

int s[7][7];

 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]=m[i][i]+m[i+1][j]+p[i-1]*p[i]*p[j];            

s[i][j]=i;                      

for(int k = i+1;k<j;k++)

{                

int temp=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];                 

if(temp<m[i][j])

{                    

m[i][j]=temp;                   

s[i][j]=k;              

}             

}         

}

 } 

 void traceback(int i,int j)

{     

     if(i==j)return ;     

traceback(i,s[i][j]);     

traceback(s[i][j]+1,j);    

cout<<"Multiply A"<<i<<","<<s[i][j]<<"and A"<<s[i][j]+1<<","<<j<<endl;

int main()

{     

 matrixChain();     

 for(int i = 1;i<=7;i++)

 {

 for(int mm = 1;mm <= 7;mm++)

 cout<<m[i][mm]<<" ";

 cout<<endl;

 }

 traceback(1,n);   

 return 0; 

}

   

你可能感兴趣的:(矩阵连成问题)