Strassen算法及其python实现
题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法。 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p。 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了: 下面咱们来具体解决这个矩阵相乘的问题。 解法一、暴力解法 其实,通过前面的分析,我们已经很明显的看出,两个具有相同维数的矩阵相乘,其复杂度为O(n^3),参考代码如下: 1 //矩阵乘法,3个for循环搞定 2 void Mul(int** matrixA, int** matrixB, int** matrixC) 3 { 4 for(int i = 0; i < 2; ++i) 5 { 6 for(int j = 0; j < 2; ++j) 7 { 8 matrixC[i][j] = 0; 9 for(int k = 0; k < 2; ++k) 10 { 11 matrixC[i][j] += matrixA[i][k] * matrixB[k][j]; 12 } 13 } 14 } 15 } 解法二、Strassen算法 在解法一中