CS 3343/3341 Introduction to Algorithms Spring 2012 |
Matrix Multiplication |
Java, without returning a matrix | Java, returns a matrix |
---|---|
// Mat.java: multiply matrices, no returns public class Mat { // z = x*y, mult of 2-by-2 matrices void mult(int x[][], int y[][], int z[][]){ for (int i = 0; i < 2; i++) { //rows for (int j = 0; j < 2; j++) { //cols z[i][j] = 0; for (int k = 0; k < 2; k++) z[i][j] += x[i][k] * y[k][j]; } } } void printMat(int x[][]){ for (int i = 0; i < 2; i++){ System.out.print("|"); for (int j = 0; j < 2; j++) System.out.print(" "+x[i][j]+" "); System.out.print("|\n"); } System.out.print("\n"); } public static void main(String[] argv) { Mat mat = new Mat(); int [][] a = {{1, 2}, {4, 3}}; int [][] b = {{4, 2}, {3, 5}}; int [][] c = new int[2][2]; mat.mult(a, b, c); mat.printMat(a); mat.printMat(b); mat.printMat(c); } } | // Matr.java: multiply matrices, with returns public class Matr { // z = x*y, mult of 2-by-2 matrices int[][] mult(int x[][], int y[][]){ int[][] z = new int[2][2]; for (int i = 0; i < 2; i++) { //rows for (int j = 0; j < 2; j++) { //cols z[i][j] = 0; for (int k = 0; k < 2; k++) z[i][j] += x[i][k] * y[k][j]; } } return z; } void printMat(int x[][]){ for (int i = 0; i < 2; i++){ System.out.print("|"); for (int j = 0; j < 2; j++) System.out.print(" "+x[i][j]+" "); System.out.print("|\n"); } System.out.print("\n"); } public static void main(String[] argv) { Matr matr = new Matr(); int [][] a = {{1, 2}, {4, 3}}; int [][] b = {{4, 2}, {3, 5}}; int [][] c = matr.mult(a, b); matr.printMat(a); matr.printMat(b); matr.printMat(c); } } |
C code, without returning a matrix | C code, returns a pointer to a matrix |
---|---|
// mat.c: multiply matrices, no returns. #include <stdio.h> // z = x*y, mult of 2-by-2 matrices void mult(int x[2][2], int y[2][2], int z[2][2]){ int i, j, k; for (i = 0; i < 2; i++) { // row for (j = 0; j < 2; j++) { // col z[i][j] = 0; for (k = 0; k < 2; k++) z[i][j] += x[i][k] * y[k][j]; } } } void printmat(int x[2][2]){ int i, j; for (i = 0; i < 2; i++){ printf("|"); for (j = 0; j < 2; j++) printf("%3i ", x[i][j]); printf("|\n"); } printf("\n"); } int main(){ int a[2][2] = {{1, 2}, {4, 3}}; int b[2][2] = {{4, 2}, {3, 5}}; int c[2][2]; mult(a, b, c); printmat(a); printmat(b); printmat(c); } | #include <stdio.h> // for printf #include <stdlib.h> // for malloc typedef int (*matrix)[2][2]; // z = x*y, mult of 2-by-2 matrices matrix mult(matrix x, matrix y){ // allocate storage; z is a pointer! matrix z = (matrix)malloc(4*sizeof(int)); int i, j, k; for (i = 0; i < 2; i++) { // each row for (j = 0; j < 2; j++) { // each col (*z)[i][j] = 0; for (k = 0; k < 2; k++) (*z)[i][j] += (*x)[i][k] * (*y)[k][j]; } } return z; } void printmat(matrix x){ int i, j; for (i = 0; i < 2; i++){ printf("|"); for (j = 0; j < 2; j++) printf("%3i ", (*x)[i][j]); printf("|\n"); } printf("\n"); } int main() { matrix a = (matrix) malloc(4*sizeof(int)); (*a)[0][0]=1; (*a)[0][1]=2; (*a)[1][0]=4; (*a)[1][1]=3; matrix b = (matrix) malloc(4*sizeof(int)); (*b)[0][0]=4; (*b)[0][1]=2; (*b)[1][0]=3; (*b)[1][1]=5; matrix c = mult(a, b); printmat(a); printmat(b); printmat(c); } |
| 1 2 | | 4 3 | | 4 2 | | 3 5 | | 10 12 | | 25 23 | |