Java中的memoized矩阵链乘法

时间:2017-02-05 03:57:17

标签: java algorithm matrix matrix-multiplication memoization

我觉得我真的很接近Java中的memoized矩阵链算法的实现,但我在第45和53行得到了一个数组越界错误。由于某些原因,这些真的好像让我搞砸了。也许还有我不断搞砸的东西,但我显然不知道。任何人都可以帮助我吗?

public class Lab2 {
//fields
static int p[];
static int m[][];
final static int INFINITY = 999999999;

public Lab2() {
    // 
}
public static void main(String[] args) {
Lab2 lab2 = new Lab2();

Lab2.m = new int[7][7];

Lab2.p = new int[7];
Lab2.p[0] = 20;
Lab2.p[1] = 8;
Lab2.p[2] = 4;
Lab2.p[3] = 25;
Lab2.p[4] = 30;
Lab2.p[5] = 5;
Lab2.p[6] = 10;


int n = Lab2.p.length-1;

//initialize m array to infinity
for (int i = 1; i <= n; i++){
    for (int j = i; j <= n; j++){
        Lab2.m[i][j]= INFINITY;
    }
}
lab2.lookUpChain(m, p, 1, n);

for (int i = 0; i < 8; i++){
    for (int j = 0; j < 8; j++){
        System.out.println(m[i][j]);
    }
}

}
//
public int lookUpChain(int m[][], int p[], int i, int j ){
if (m[i][j]<INFINITY){
    return m[i][j];
}
if (i == j){
    m[i][j] = 0;
}
else{
    for (int k = i; k <= j; i++){
        int q = (lookUpChain(m,p,i,k)) + (lookUpChain(m,p,k+1,j)) +     (p[i]*p[k]*p[j]);
        if (q < m[i][j]){
            m[i][j] = q;
        }
    }
}
return m[i][j];

}
}

1 个答案:

答案 0 :(得分:0)

  

否则{       for(int k = i; k&lt; = j; i ++)

更改为:

else{
for (int k = i; k <= j; k++) // change i to k