问题:
设给定n个矩阵的链<A 1 ,A 2 ,…,A n >,其中i=1,2,…,n,矩阵A i的维数为p i-1 ×p i 。给定向量 P,确定一种乘法次序,使得计算乘积A1 A2 …A n 所需的标量乘法次数最小。
设计:
#include<stdio.h>
int PrintDivi(int (*p)[6], int start, int end)
{
int Divi;
Divi = p[start][end];
if(start == end)
printf("A%d",start+1);
else
{
printf("(");
PrintDivi(p, start, Divi);
PrintDivi(p, Divi+1, end);
printf(")");
}
}
int main(void)
{
int l,i,j,k,temp;
int p[7] = {30,35,15,5,10,20,25};
int m[6][6],s[6][6];
for(i=0;i<6;i++)
{
m[i][i] = 0;
}
for(l=2;l<=6;l++)
for(i=0;i<6-l+1;i++)
{
j=i+l-1;
m[i][j] = 0x7fffffff;
for(k=i;k<j;k++)
{
temp = m[i][k]+m[k+1][j]+p[i]*p[k+1]*p[j+1];
if(temp<m[i][j])
{
m[i][j] = temp;
s[i][j] = k;
}
}
}
PrintDivi(s, 0, 5);
return 0;
}
分析:
时间复杂度为O(n^3)。
本文探讨了如何通过矩阵链乘法优化算法减少计算n个矩阵乘积所需的标量乘法次数,提供了一个C程序实例,并分析了其时间复杂度为O(n^3)。关键步骤包括计算子矩阵最优乘法路径和矩阵分解。
3169

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



