我有一个学校项目要创建两个版本的 javacode 来乘以两个方阵。为了更简单,他们只需要为 2x2、4x4、8x8 等工作。我们有一个看起来像这样的伪代码(很可能来自同一本书的另一个问题):
我们要把它变成代码(我只会Java),我们必须实现分区部分。我们可以选择是要普通数组还是多维数组。代码的两个版本是这样的:一个是在分区中创建子矩阵(数组),第二个是使用数组索引并将它们传递下去。
最让我疑惑的是底层乱用array+array和int+int。我明白了代码的概念,但我不知道如何正确地实现它。
谁能指出我正确的方向??
最佳答案
这是一个没有处理矩阵的 Java 实现。这仅适用于 nxn 矩阵,因此 n= 2^x。
public static int[][] matrixMultiplicationFinal(int[][] A, int[][] B){
return matrixMultiplication(
A, B, 0, 0,
0,0, A.length);
}
public static int[][] matrixMultiplication(
int[][] A, int[][] B, int rowA, int colA,
int rowB, int colB, int size){
int[][] C= new int[size][size];
if(size==1)
C[0][0]= A[rowA][colA]*B[rowB][colB];
else{
int newSize= size/2;
//C11
sumMatrix(C,
matrixMultiplication(A, B, rowA, colA, rowB, colB, newSize),
matrixMultiplication(A, B, rowA, colA+newSize, rowB+ newSize, colB, newSize),
0, 0);
sumMatrix(C,
matrixMultiplication(A, B, rowA, colA, rowB, colB + newSize, newSize),
matrixMultiplication(A, B, rowA, colA+newSize, rowB+ newSize, colB+newSize, newSize),
0, newSize);
sumMatrix(C,
matrixMultiplication(A, B, rowA+ newSize, colA, rowB, colB, newSize),
matrixMultiplication(A, B, rowA+ newSize, colA+newSize, rowB+ newSize, colB, newSize),
newSize, 0);
sumMatrix(C,
matrixMultiplication(A, B, rowA+ newSize, colA, rowB, colB+newSize, newSize),
matrixMultiplication(A, B, rowA+ newSize, colA+newSize, rowB+ newSize, colB+newSize, newSize),
newSize, newSize);
}
return C;
}
private static void sumMatrix(int[][] C, int[][]A, int[][]B,int rowC, int colC){
int n=A.length;
for(int i =0; i<n; i++){
for(int j=0; j<n; j++)
C[i+rowC][j+colC]=A[i][j]+B[i][j];
}
}
关于java - 使用分而治之在 Java 中方矩阵乘递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21496538/