1. 问题描述:
2. 核心思想
问题结构分析——递推关系建立——自底向上计算——最优方案追踪
3. 算法伪代码
核心算法
3. Java代码实现
// matrixChainMultiply Algorithm
public class matrixChainMultiply {
private static int[][] rec;
public static void main(String[] args){
int[] p = {2,3,7,9,5,2,4};
rec = new int[p.length][p.length];
int result = matrixChainMultiply(p, p.length-1);
printMatrixChain(1,p.length-1);
System.out.println(result);
}
private static int matrixChainMultiply(int[] p, int n){
int[][] D = new int[n+1][n+1];
for(int i=1;i<=n; i++){
D[i][i] = 0;
}
for(int l=2; l<=n; l++){
for(int i=1; i<=n-l+1; i++){
int j = i+l-1;
D[i][j] = Integer.MAX_VALUE;
for(int k=i; k<=j-1; k++){
int q = D[i][k] + D[k+1][j] + p[i-1]*p[k]*p[j];
if(q<D[i][j]){
D[i][j] = q;
rec[i][j] = k;
}
}
}
}
return D[1][n];
}
private static void printMatrixChain(int i, int j){
if(i==j){
System.out.print("U_"+i);
}else{
System.out.print("(");
printMatrixChain(i, rec[i][j]);
System.out.print(")(");
printMatrixChain(rec[i][j]+1, j);
System.out.print(")");
}
}
}