今天看了strassen算法,用java实现了一下。
另外题目4.2-3,如何修改Strassen算法,使之适应矩阵规模n不是2的幂的情况?
答:添加额外的行或列使之成为2的幂的方阵,添加的行或列均为0即可。
文章中提到在分解矩阵时使用复杂度为θ(1)的下标运算,本人为了方便,是采用拷贝赋值的方式进行的矩阵分解。
package answers.chapter04;
import java.util.Arrays;
public class MatrixMultiply {
public static void SquareMatrixMultiply(int A[][], int B[][]) {
int rows = A.length;
int C[][] = new int[rows][rows];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < rows; j++) {
C[i][j] = 0;
for (int k = 0; k < rows; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
displaySquare(C);
}
public static void displaySquare(int matrix[][]) {
for (int i = 0; i < matrix.length; i++) {
for (int j : matrix[i]) {
System.out.print(j+" ");
}
System.out.println();
}
}
public static void copyToMatrixArray(int srcMatrix[][],