对于矩阵运算......
public static int[][] ijkAlgorithm(int[][] A, int[][] B) {
int n = A.length;
int[][] C = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
public static int[][] ikjAlgorithm(int[][] A, int[][] B) {
int n = A.length;
int[][] C = new int[n][n];
for (int i = 0; i < n; i++) {
for (int k = 0; k < n; k++) {
for (int j = 0; j < n; j++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
我知道 ikj 比 ijk 更快,但不知道为什么。有任何简单的解释吗?谢谢。
答案 0 :(得分:12)
在第二个片段中,编译器可以优化
for (int k = 0; k < n; k++) {
for (int j = 0; j < n; j++) {
C[i][j] += A[i][k] * B[k][j];
}
}
等同于
的东西 for (int k = 0; k < n; k++) {
int temp = A[i][k];
for (int j = 0; j < n; j++) {
C[i][j] += temp * B[k][j];
}
}
但在第一个代码段中无法进行此类优化。所以第二个片段需要更少的数组查找。