package com.work.home_2;
/**
* 矩阵乘法
* @author xuejun
*/
public class MatrixMultiplication {
/**
* strassen 算法(阶数n为2的幂)
*/
public static int[][] strassens(int n, int[][] a, int[][] b) {
int[][] c = new int[n][n];
if (!(n == 2)) {
// 如果n不是2,拆分矩阵 A
int[][] a11 = new int[n / 2][n / 2];
int[][] a12 = new int[n / 2][n / 2];
int[][] a21 = new int[n / 2][n / 2];
int[][] a22 = new int[n / 2][n / 2];
// 拆分矩阵 B
int[][] b11 = new int[n / 2][n / 2];
int[][] b12 = new int[n / 2][n / 2];
int[][] b21 = new int[n / 2][n / 2];
int[][] b22 = new int[n / 2][n / 2];
// 矩阵 A 左上角赋给矩阵 a11
for (int i = 0; i < (n / 2); i++) {
for (int j = 0; j < (n / 2); j++) {
a11[i][j] = a[i][j];
}
}
// 矩阵 A 右上角赋给矩阵 a12
for (int i = 0; i < (n / 2); i++) {
for (int j = (n / 2), k = 0; j < n; j++, k++) {
a12[i][k] = a[i][j];
}
}
// 矩阵 A 左下角赋给矩阵 a21
for (int i = (n / 2), k = 0; i < n; i++, k++) {
for (int j = 0; j < (n / 2); j++) {
a21[k][j] = a[i][j];
}
}
// 矩阵 A 右下角赋给矩阵 a22
for (int i = (n / 2), k = 0; i < n; i++, k++) {
for (int j = (n / 2), g = 0; j < n; j++, g++) {
a22[k][g] = a[i][j];
}
}
// 矩阵 B 左上角赋给矩阵 b11
for (int i = 0; i < (n / 2); i++) {
for (int j = 0; j < (n / 2); j++) {
b11[i][j] = b[i][j];
}
}
// 矩阵 B 右上角赋给矩阵 b12
for (int i = 0; i < (n / 2); i++) {
for (int j = (n / 2), k = 0; j < n; j++, k++) {
/**
* 矩阵乘法
* @author xuejun
*/
public class MatrixMultiplication {
/**
* strassen 算法(阶数n为2的幂)
*/
public static int[][] strassens(int n, int[][] a, int[][] b) {
int[][] c = new int[n][n];
if (!(n == 2)) {
// 如果n不是2,拆分矩阵 A
int[][] a11 = new int[n / 2][n / 2];
int[][] a12 = new int[n / 2][n / 2];
int[][] a21 = new int[n / 2][n / 2];
int[][] a22 = new int[n / 2][n / 2];
// 拆分矩阵 B
int[][] b11 = new int[n / 2][n / 2];
int[][] b12 = new int[n / 2][n / 2];
int[][] b21 = new int[n / 2][n / 2];
int[][] b22 = new int[n / 2][n / 2];
// 矩阵 A 左上角赋给矩阵 a11
for (int i = 0; i < (n / 2); i++) {
for (int j = 0; j < (n / 2); j++) {
a11[i][j] = a[i][j];
}
}
// 矩阵 A 右上角赋给矩阵 a12
for (int i = 0; i < (n / 2); i++) {
for (int j = (n / 2), k = 0; j < n; j++, k++) {
a12[i][k] = a[i][j];
}
}
// 矩阵 A 左下角赋给矩阵 a21
for (int i = (n / 2), k = 0; i < n; i++, k++) {
for (int j = 0; j < (n / 2); j++) {
a21[k][j] = a[i][j];
}
}
// 矩阵 A 右下角赋给矩阵 a22
for (int i = (n / 2), k = 0; i < n; i++, k++) {
for (int j = (n / 2), g = 0; j < n; j++, g++) {
a22[k][g] = a[i][j];
}
}
// 矩阵 B 左上角赋给矩阵 b11
for (int i = 0; i < (n / 2); i++) {
for (int j = 0; j < (n / 2); j++) {
b11[i][j] = b[i][j];
}
}
// 矩阵 B 右上角赋给矩阵 b12
for (int i = 0; i < (n / 2); i++) {
for (int j = (n / 2), k = 0; j < n; j++, k++) {