矩阵连乘问题的java实现

来源:互联网 发布:淘宝店铺的网址怎么看 编辑:程序博客网 时间:2024/05/27 20:32

代码如下:

public class matrixChain {
static int m[][],s[][];
//p[]记录矩阵A1,A2,A3,....,An;m[][]记录每次计算之后的最少次数及最优值;s[][]记录最佳断点位置。
    public static void matrixChain(int p[],int m[][],int s[][]) {
int n = p.length-1;
int i,j;
for ( i = 1; i <=n; i++)   //初始化单个矩阵的计算值
m[i][i] = 0;
for (int r = 2; r <= n; r++) {   //矩阵链的长度
for ( i = 1; i <=n-r+1; i++) {  //矩阵链长度为r的矩阵的起始位置
 j = i+r-1;   //矩阵链长度为r,起始位置为i的最后一个矩阵的位置
 m[i][j] = m[i][i]+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;  
                   }  
}  
}
}
}
    public static void traceBack(int s[][],int i,int j) {
    if(i==j)
    return;
    traceBack(s,i,s[i][j]);    
    traceBack(s,s[i][j]+1,j);
    System.out.println("Multiply    A" + i + "," + s[i][j] + "and A"  
               + (s[i][j] + 1) + "," + j);  
    }
public static void main(String[] args) {
int p[] = { 30, 35, 15, 5, 10, 20, 25};
int n=p.length-1;
m=new int[10][10];
s=new int[10][10];
matrixChain(p,m,s);
traceBack(s,1,n);
}
}

效果如下:


1 0
原创粉丝点击