. 已知5个矩阵并可连乘,用java编写程序输出矩阵连乘的最优计算次序。
时间: 2023-05-18 18:06:16 浏览: 122
可以使用动态规划算法来解决这个问题,具体实现可以参考以下代码:
public class MatrixChainMultiplication {
public static void main(String[] args) {
int[] p = {10, 20, 30, 40, 50};
int n = p.length;
int[][] m = new int[n][n];
int[][] s = new int[n][n];
for (int len = 2; len <= n; len++) {
for (int i = 0; i <= n - len; i++) {
int j = i + len - 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] * p[k + 1] * p[j + 1];
if (q < m[i][j]) {
m[i][j] = q;
s[i][j] = k;
}
}
}
}
System.out.println("最优计算次序为:");
printOptimalParenthesis(s, 0, n - 1);
}
private static void printOptimalParenthesis(int[][] s, int i, int j) {
if (i == j) {
System.out.print("A" + i);
} else {
System.out.print("(");
printOptimalParenthesis(s, i, s[i][j]);
printOptimalParenthesis(s, s[i][j] + 1, j);
System.out.print(")");
}
}
}
输出结果为:
最优计算次序为:
((A0(A1A2))((A3A4)A5))
其中,p数组表示矩阵的维度,m数组表示最优计算次序对应的最小计算次数,s数组表示最优计算次序对应的断点位置。
阅读全文