主题
Search

Strassen 公式


执行 n×n 矩阵乘法 通常所需的标量运算数(即,加法和乘法的总数)是

 M(n)=2n^3-n^2
(1)

(即,n^3 次乘法和 n^3-n^2 次加法)。然而,Strassen (1969) 发现了如何用

 S(n)=7·7^(lgn)-6·4^(lgn)
(2)

次标量运算来乘两个 矩阵,其中 lg 是以 2 为底的 对数,这小于 M(n),当 n>654 时。对于 n 为 2 的幂次方 (n=2^k),(2) 的两部分可以写成

7·7^(lgn)=7·7^(lg2^k)
(3)
=7·7^k
(4)
=7·2^(klg7)
(5)
=7(2^k)^(lg7)
(6)
=7n^(lg7)
(7)
6·4^(lgn)=6·4^(lg2^k)
(8)
=6·4^(klg2)
(9)
=6·4^k
(10)
=6(2^k)^2
(11)
=6n^2,
(12)

因此 (◇) 变为

 S(2^k)=7n^(lg7)-6n^2.
(13)

对于 2 的幂次方,Strassen 算法的领先指数因此为 lg7 approx 2.808

下表总结了 Coppersmith 和 Winograd (1990) 的构造在 m 次幂的领先指数 omega 中已证明的极限的改进(参见 Le Gall 2014,表 I)。

m上限参考文献
12.3871900Coppersmith 和 Winograd (1990)
22.3754770Coppersmith 和 Winograd (1990)
42.3736898Strothers (2010), Davie 和 Strothers (2013)
42.3729269Vassilevska Williams (2012)
82.3729Vassilevska Williams (2014)
82.3728642Le Gall (2014)
162.3728640Le Gall (2014)
322.3728639Le Gall (2014)

使用 Strassen 乘法,2×2 矩阵可以相乘

 C=AB
(14)
 [c_(11) c_(12); c_(21) c_(22)]=[a_(11) a_(12); a_(21) a_(22)][b_(11) b_(12); b_(21) b_(22)]
(15)

仅需

 S(2)=7·2^(lg7)-6·2^2=49-24=25
(16)

次标量运算(结果表明,其中七次是乘法,18 次是加法)。定义七个乘积(总共涉及 10 次加法)为

Q_1=(a_(11)+a_(22))(b_(11)+b_(22))
(17)
Q_2=(a_(21)+a_(22))b_(11)
(18)
Q_3=a_(11)(b_(12)-b_(22))
(19)
Q_4=a_(22)(-b_(11)+b_(21))
(20)
Q_5=(a_(11)+a_(12))b_(22)
(21)
Q_6=(-a_(11)+a_(21))(b_(11)+b_(12))
(22)
Q_7=(a_(12)-a_(22))(b_(21)+b_(22)).
(23)

然后,使用剩余的八次加法,矩阵乘积给出为

c_(11)=Q_1+Q_4-Q_5+Q_7
(24)
c_(21)=Q_2+Q_4
(25)
c_(12)=Q_3+Q_5
(26)
c_(22)=Q_1+Q_3-Q_2+Q_6
(27)

(Strassen 1969, Press et al. 1989)。

一个 2×2 矩阵 A 的矩阵求逆以产生 C=A^(-1) 也可以用比预期更少的操作完成,使用以下公式

R_1=a_(11)^(-1)
(28)
R_2=a_(21)R_1
(29)
R_3=R_1a_(12)
(30)
R_4=a_(21)R_3
(31)
R_5=R_4-a_(22)
(32)
R_6=R_5^(-1)
(33)
c_(12)=R_3R_6
(34)
c_(21)=R_6R_2
(35)
R_7=R_3c_(21)
(36)
c_(11)=R_1-R_7
(37)
c_(22)=-R_6
(38)

(Strassen 1969, Press et al. 1989)。

不幸的是,Strassen 算法的数值表现不佳。它只是弱稳定,即,计算结果 C=AB 满足不等式

 ||C-AB||<=nu||A||||B||+O(u^2),
(39)

其中 u 是单位舍入误差,而相应的强稳定性不等式(通过用矩阵元素的绝对值替换矩阵范数获得)不成立。


另请参阅

复数乘法, Karatsuba 乘法

使用 Wolfram|Alpha 探索

参考文献

Coppersmith, D. 和 Winograd, S. "Matrix Multiplication via Arithmetic Programming." J. Symb. Comput. 9, 251-280, 1990.Davie, A. M.; 和 Strothers, A. J. "Improved Bound for Complexity of Matrix Multiplication." Proc. Royal Soc. Edinburgh 143A, 351-370, 2013.Douglas, C.; Heroux, M.; Slishman, G.; 和 Smith, R. "GEMMW: A Portable Level 3 BLAS Winograd Variant of Strassen's Matrix-Matrix Multiply Algorithm." J. Comput. Phys. 110, 1-10, 1994.Le Gall, F. "Powers of Tensors and Fast Matrix Multiplication." 2014 年 1 月 30 日. https://arxiv.org/abs/1401.7714.Pan, V. How to Multiply Matrices Faster. New York: Springer-Verlag, 1982.Press, W. H.; Flannery, B. P.; Teukolsky, S. A.; 和 Vetterling, W. T. "Is Matrix Inversion an N^3 Process?" §2.11 in Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England: Cambridge University Press, pp. 95-98, 1989.Strassen, V. "Gaussian Elimination is Not Optimal." Numerische Mathematik 13, 354-356, 1969.Strothers, A. "On the Complexity of Matrix Multiplication." Ph.D. 论文. Edinburgh, Scottland: University of Edinburgh, 2010.Vassilevska Williams, V. "Multiplying Matrices Faster Than Coppersmith-Winograd." In STOC'12--Proceedings of the 2012 ACM Symposium on Theory of Computing. New York: ACM, pp. 887-898, 2012.Vassilevska Williams, V. "Multiplying Matrices in O(n^2.373)." 2014 年 7 月 1 日. http://theory.stanford.edu/~virgi/matrixmult-f.pdf.

在 Wolfram|Alpha 上被引用

Strassen 公式

请引用为

Weisstein, Eric W. "Strassen 公式。" 来自 MathWorld--一个 Wolfram Web 资源。 https://mathworld.net.cn/StrassenFormulas.html

主题分类