矩阵链乘法
1. 问题
设A1, A2…, An为n个矩阵的序列,其中A1为Pi-1*Pi阶矩阵,这个矩阵链的输入用向量P=<P0, P1, P2…Pn>给出。
给定向量P,确定一种乘法次序,使得基本运算的总次数达到最小。
2. 解析
3. 设计
void matrixChainOrder(int *p,int Length,int m[][M],int s[][M])
{
int q,n=Length-1;
for(int i=1;i<=n;i++) m[i][i]=0;
for(int l=2;l<=n;l++) /* 矩阵链的长度 */
{
for(int i=1;i<=n-l+1;i++)
{
int j=i+l-1; /* 等价于 l=j-i+1 */
m[i][j]=INTMAX;
for(int k=i;k<=j-1;k++)
{
q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(q<m[i][j])
{
m[i][j]=q;
s[i][j]=k;
}
}
}
}
}
4. 分析
时间复杂度:O(n^3)
5. 源码
https://github.com/Marshmello11/Algorithm/tree/master/Experiment_8