affdgfsdgsdfgg

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MatrixMultiplication {

    public static void main(String[] args) {
        // Define two matrices
        int[][] matrixA = {
            {1, 2},
            {3, 4}
        };
        int[][] matrixB = {
            {5, 6},
            {7, 8}
        };

        // Define the MapReduce-like process
        List<IntermediateData> intermediateData = map(matrixA, matrixB);
        int[][] resultMatrix = reduce(intermediateData, matrixA[0].length, matrixB[0].length);

        // Print the result
        printMatrix(resultMatrix);
    }

    private static List<IntermediateData> map(int[][] matrixA, int[][] matrixB) {
        List<IntermediateData> intermediateData = new ArrayList<>();

        // Map step: Emit key-value pairs for Matrix A and Matrix B
        for (int i = 0; i < matrixA.length; i++) {
            for (int j = 0; j < matrixA[0].length; j++) {
                intermediateData.add(new IntermediateData(i, j, “A”, matrixA[i][j]));
            }
        }

        for (int j = 0; j < matrixB[0].length; j++) {
            for (int k = 0; k < matrixB.length; k++) {
                intermediateData.add(new IntermediateData(j, k, “B”, matrixB[k][j]));
            }
        }

        return intermediateData;
    }

    private static int[][] reduce(List<IntermediateData> intermediateData, int numColsA, int numColsB) {
        Map<String, Integer> intermediateMap = new HashMap<>();

        // Reduce step: Perform matrix multiplication
        for (IntermediateData data : intermediateData) {
            String key = data.getRow() + “,” + data.getCol();
            if (data.getMatrixType().equals(“A”)) {
                intermediateMap.put(key + “,” + data.getMatrixType(), data.getValue());
            } else {
                intermediateMap.put(key + “,” + data.getMatrixType(), data.getValue());
            }
        }

        int[][] resultMatrix = new int[numColsA][numColsB];

        for (int i = 0; i < numColsA; i++) {
            for (int j = 0; j < numColsB; j++) {
                int sum = 0;
                for (int k = 0; k < numColsA; k++) {
                    int a = intermediateMap.getOrDefault(i + “,” + k + “,A”, 0);
                    int b = intermediateMap.getOrDefault(k + “,” + j + “,B”, 0);
                    sum += a * b;
                }
                resultMatrix[i][j] = sum;
            }
        }

        return resultMatrix;
    }

    private static void printMatrix(int[][] matrix) {
        for (int[] row : matrix) {
            for (int value : row) {
                System.out.print(value + ” “);
            }
            System.out.println();
        }
    }

    static class IntermediateData {
        private final int row;
        private final int col;
        private final String matrixType;
        private final int value;

        public IntermediateData(int row, int col, String matrixType, int value) {
            this.row = row;
            this.col = col;
            this.matrixType = matrixType;
            this.value = value;
        }

        public int getRow() {
            return row;
        }

        public int getCol() {
            return col;
        }

        public String getMatrixType() {
            return matrixType;
        }

        public int getValue() {
            return value;
        }
    }
}

Paste text,images,html and share with anyone
Scroll to Top