此代碼取自一個常見的算法書籍。本書使用從1開始的數組,而不是從0開始m
,但從p
開始。我如何解決它?爲什麼我總是得到一個ArrayIndexOutOfBoundsException?
這些都是錯誤的:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at MMC_Test.MemoizedMatrixChain(MMC_Test.java:8)
at MMC_Test.main(MMC_Test.java:36)
和代碼在這裏
public class MMC_Test {
public static int MemoizedMatrixChain(int[] p) {
int n = p.length - 1;
int[][] m = new int[n][n];
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
m[i][j] = Integer.MAX_VALUE;
}
}
return lookUpChain(m, p, 1, n);
}// MemoizedMatrixChain
public static int lookUpChain(int[][] m, int[] p, int i, int j) {
if (m[i][j] > Integer.MAX_VALUE) {
return m[i][j];
}
if (i == j) {
m[i][j] = 0;
} else {
for (int k = i; k <= j - 1; k++) {
int q = lookUpChain(m, p, i, k)
+ lookUpChain(m, p, k + 1, j)
+ p[i - 1] * p[k] * p[j];
if (q < m[i][j]) {
m[i][j] = q;
}
}
}
return m[i][j];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 30, 35, 15, 5, 10, 20, 25 };
int result = MemoizedMatrixChain(arr);
System.out.println(result);
}// main
}
只是用'米替換'米[I]'(或類似)[I-1]'無處不在。 – 2013-04-07 17:48:27
我喜歡這行'if(m [i] [j]> Integer.MAX_VALUE){' – SJuan76 2013-04-07 17:49:38
@ SJuan76這是索引跳舞的地方。 – 2013-04-07 17:58:03