矩阵链乘法
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
本文详细解析了矩阵链乘法的问题,介绍了如何通过特定算法确定最优乘法次序,以减少基本运算的总次数,提供了具体的设计实现及源码链接。
875

被折叠的 条评论
为什么被折叠?



