给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,
i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得
i=1,2 ,…,n-1。如何确定计算矩阵连乘积的计算次序,使得
依此次序计算矩阵连乘积需要的数乘次数最少。
题解:
动态规划
设计算A[i:j],1<=i<=j<=n,所需要的最少数乘次数m[i,j],则原问题的最优值为m[1,:m];
当i==j时,A[i:j]=Ai,因此,m[i,i]=0;,i=1,2,3,.....n
当i<j时
m[i,:j]=m[i,k]+m[k+1,j]+pi-1*pk*pj
这里Ai的维数为pi-1*pi
模板
public void matrixChain(int [] p, int [][] m, int [][] s)
{
int n=p.length-1;
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=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;
}
}
}
}