执行 矩阵乘法 通常所需的标量运算数(即,加法和乘法的总数)是
(1)
|
(即, 次乘法和
次加法)。然而,Strassen (1969) 发现了如何用
(2)
|
次标量运算来乘两个 矩阵,其中 是以 2 为底的 对数,这小于
,当
时。对于
为 2 的幂次方 (
),(2) 的两部分可以写成
(3)
| |||
(4)
| |||
(5)
| |||
(6)
| |||
(7)
| |||
(8)
| |||
(9)
| |||
(10)
| |||
(11)
| |||
(12)
|
因此 (◇) 变为
(13)
|
对于 2 的幂次方,Strassen 算法的领先指数因此为 。
下表总结了 Coppersmith 和 Winograd (1990) 的构造在 次幂的领先指数
中已证明的极限的改进(参见 Le Gall 2014,表 I)。
上限 | 参考文献 | |
1 | 2.3871900 | Coppersmith 和 Winograd (1990) |
2 | 2.3754770 | Coppersmith 和 Winograd (1990) |
4 | 2.3736898 | Strothers (2010), Davie 和 Strothers (2013) |
4 | 2.3729269 | Vassilevska Williams (2012) |
8 | 2.3729 | Vassilevska Williams (2014) |
8 | 2.3728642 | Le Gall (2014) |
16 | 2.3728640 | Le Gall (2014) |
32 | 2.3728639 | Le Gall (2014) |
使用 Strassen 乘法, 矩阵可以相乘
(14)
|
(15)
|
仅需
(16)
|
次标量运算(结果表明,其中七次是乘法,18 次是加法)。定义七个乘积(总共涉及 10 次加法)为
(17)
| |||
(18)
| |||
(19)
| |||
(20)
| |||
(21)
| |||
(22)
| |||
(23)
|
然后,使用剩余的八次加法,矩阵乘积给出为
(24)
| |||
(25)
| |||
(26)
| |||
(27)
|
(Strassen 1969, Press et al. 1989)。
一个 矩阵
的矩阵求逆以产生
也可以用比预期更少的操作完成,使用以下公式
(28)
| |||
(29)
| |||
(30)
| |||
(31)
| |||
(32)
| |||
(33)
| |||
(34)
| |||
(35)
| |||
(36)
| |||
(37)
| |||
(38)
|
(Strassen 1969, Press et al. 1989)。
不幸的是,Strassen 算法的数值表现不佳。它只是弱稳定,即,计算结果 满足不等式
(39)
|
其中 是单位舍入误差,而相应的强稳定性不等式(通过用矩阵元素的绝对值替换矩阵范数获得)不成立。