矩阵乘法的定义为:
按照定义,一个简单的方阵乘法伪代码如下:
int A[48,48],B[48,48],C[48,48]
for i in 1 to 48
for j in 1 to 48
for k in 1 to 48
C[i,j]+=B[i,k]*A[k,j]
三层嵌套,时间复杂度为O(n3),n为方阵的边长。
由于矩阵乘法的广泛运用,如何优化矩阵乘法运算,有重要的意义。在不考虑矩阵的疏密程度下,如何有效减少矩阵乘法中算术乘法的使用次数是一个主要的优化方向。
最早的矩阵乘法优化算法,是由德国数学家Volker Strassen于1969年提出并以其名字命名的Strassen算法。该算法堪称经典,能在大多算法,运算优化的教科书中找到该算法的介绍。这里也有算法的基本介绍。它的主要思路是通过拼凑一些间接的项,并利用这些间接的项的加减法相消掉一部分项得到最终答案的。简单说来,是以加减法代替了乘法。对于一个二阶的方阵,原来需要8(23)次的乘法运算,被缩减到了7(2log7))次。这个算法的重要意义有两方面,首先是它将矩阵乘法的时间复杂度,由O(n3)降为O(nlog7),log7约为2.807355.即原来的立方运算被降维了(O(n2.807355)),然而更为重要的是,这个算法让数学家意识到,这个问题不是单纯的三维问题,而是很有可能更低维度的问题,也就是说,可能有很大的优化空间。
在此之后,不少更好的算法被相继提出。这里列举一些我能够找到对应文献的:1981年Pan的算法(O(n2.494)),1987年的Coppersmith–Winograd算法(