Java中使用分而治之的方阵乘递归?

mat*_*d91 1 java arrays recursion matrix

我有一个学校项目来创建两个版本的javacode来乘以两个方阵。为了使其更容易,它们只需要适用于 2x2、4x4、8x8 等。我们有一个如下所示的伪代码(很可能取自同一本书中的另一个问题):在此输入图像描述

我们要把它变成代码(我只懂Java),我们必须实现分区部分。我们可以选择想要普通数组还是多维数组。代码的两个版本是这样的:一个是在分区中创建子矩阵(数组),第二个是使用数组索引并将它们传递下去。

我最困惑的是底部随机使用 array + array 和 int + int 。我明白了代码的想法,但我不知道如何正确实现它。

有人能指出我正确的方向吗?

小智 5

这是一个没有处理矩阵的 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];
    }

}
Run Code Online (Sandbox Code Playgroud)