/**
* Introduction to Algorithms, Second Edition
* 15.2 Matrix-chain multiplication
* @author 土豆爸爸
*
*/
public class MatrixChain {
public static int[][] order(int[] p) {
int n = p.length - 1;
int[][] m = new int[p.length][p.length];
int[][] s = new int[p.length][p.length];
for (int l = 2; l <= n; l++) {
for (int i = 1; i <= n - l + 1; i++) {
int j = i + l - 1;
m[i][j] = Integer.MAX_VALUE;
for (int k = i; k < j; k++) {
int q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
if (q < m[i][j]) {
m[i][j] = q;
s[i][j] = k;
}
}
}
}
return s;
}
}
import junit.framework.TestCase;
public class MatrixChainTest extends TestCase {
public void testMatrixChain() {
int[] p = {30, 35, 15, 5, 10, 20 ,25};
int[][] s = MatrixChain.order(p);
print(s, 1, 6);
}
public void print(int[][] s, int i, int j) {
if(i == j) {
System.out.print("A" + i);
} else {
System.out.print("(");
print(s, i, s[i][j]);
print(s, s[i][j] + 1, j);
System.out.print(")");
}
}
}
算法导论示例-MatrixChain
最新推荐文章于 2025-07-29 14:02:39 发布
本文介绍了一种优化矩阵链乘法的方法,通过动态规划算法计算最优的矩阵乘法顺序,以减少不必要的计算开销。文章提供了一个Java实现的例子,并通过单元测试验证了算法的有效性。
401

被折叠的 条评论
为什么被折叠?



