请阐述strassen矩阵乘法及其发展历史
时间: 2023-11-23 07:06:05 浏览: 114
Strassen算法是一种基于分治思想的矩阵乘法算法,它可以将两个n x n的矩阵相乘的时间复杂度从传统的O(n^3)降低到O(n^log2(7)),其中log2(7)约等于2.81。这个算法的核心思想是将两个矩阵按照一定的方式分解为四个子矩阵,然后利用这些子矩阵的乘积来计算原来的矩阵乘积。具体来说,Strassen算法的步骤如下:
1. 将两个n x n的矩阵A和B分别分解成四个n/2 x n/2的子矩阵。
2. 计算出七个n/2 x n/2的矩阵P1、P2、P3、P4、P5、P6和P7,其中P1=A11*(B12-B22),P2=(A11+A12)*B22,P3=(A21+A22)*B11,P4=A22*(B21-B11),P5=(A11+A22)*(B11+B22),P6=(A12-A22)*(B21+B22),P7=(A11-A21)*(B11+B12)。
3. 通过这些子矩阵的乘积来计算出原来的矩阵乘积C,即C11=P5+P4-P2+P6,C12=P1+P2,C21=P3+P4,C22=P5+P1-P3-P7。
Strassen算法的时间复杂度为O(n^log2(7)),比传统的矩阵乘法算法的时间复杂度O(n^3)要优秀。
Strassen算法的历史可以追溯到1969年,当时德国数学家Volker Strassen发表了一篇题为"Theorie von Matrizen"的论文,其中提出了这个算法。随后,人们对这个算法进行了大量的优化和改进,比如使用多项式求解技术来加速计算。此外,还出现了一些基于Strassen算法的变体,比如Winograd算法和Coppersmith-Winograd算法等。这些算法在理论上可以进一步降低矩阵乘法的时间复杂度,但是它们的实际效果并不如Strassen算法那么好。
阅读全文