Square Matrix Multiply Recursive in Java using Divide and Conquer?

后端 未结 3 560
感情败类
感情败类 2021-01-23 16:23

I have a school project to create 2 versions of a javacode that multiplies two square matrices. To make it easier, they only have to work for 2x2, 4x4, 8x8 etc. We have a pseudo

3条回答
  •  醉酒成梦
    2021-01-23 16:54

    here is a Java implementation without coping the matrices. This works only for nxn matrices so that 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

提交回复
热议问题