出典: フリー百科事典『ウィキペディア(Wikipedia)』
シュトラッセンのアルゴリズム (Strassen algorithm)は、行列 の積を高速に計算するアルゴリズム である。通常、
N
×
N
{\displaystyle N\times N}
行列同士の積を計算するには
O
(
N
3
)
{\displaystyle O(N^{3})}
の時間が必要だが、このアルゴリズムを用いると、
O
(
N
log
2
7
)
≈
O
(
N
2.807
)
{\displaystyle O(N^{\log _{2}7})\approx O(N^{2.807})}
の時間で計算できる[1] 。1969年 、フォルカー・シュトラッセン が開発した[1] [2] 。
便宜上、
N
{\displaystyle N}
を偶数と考えて、以下のように
N
2
×
N
2
{\displaystyle {\frac {N}{2}}\times {\frac {N}{2}}}
部分行列に分解する。
(
C
11
C
12
C
21
C
22
)
=
(
A
11
A
12
A
21
A
22
)
(
B
11
B
12
B
21
B
22
)
{\displaystyle {\begin{pmatrix}C_{11}&C_{12}\\C_{21}&C_{22}\\\end{pmatrix}}={\begin{pmatrix}A_{11}&A_{12}\\A_{21}&A_{22}\\\end{pmatrix}}{\begin{pmatrix}B_{11}&B_{12}\\B_{21}&B_{22}\\\end{pmatrix}}}
そして、以下の七つの行列をつくる。
P
1
=
(
A
11
+
A
22
)
(
B
11
+
B
22
)
{\displaystyle P_{1}=(A_{11}+A_{22})(B_{11}+B_{22})}
P
2
=
(
A
21
+
A
22
)
B
11
{\displaystyle P_{2}=(A_{21}+A_{22})B_{11}}
P
3
=
A
11
(
B
12
−
B
22
)
{\displaystyle P_{3}=A_{11}(B_{12}-B_{22})}
P
4
=
A
22
(
B
21
−
B
11
)
{\displaystyle P_{4}=A_{22}(B_{21}-B_{11})}
P
5
=
(
A
11
+
A
12
)
B
22
{\displaystyle P_{5}=(A_{11}+A_{12})B_{22}}
P
6
=
(
A
21
−
A
11
)
(
B
11
+
B
12
)
{\displaystyle P_{6}=(A_{21}-A_{11})(B_{11}+B_{12})}
P
7
=
(
A
12
−
A
22
)
(
B
21
+
B
22
)
{\displaystyle P_{7}=(A_{12}-A_{22})(B_{21}+B_{22})}
このとき、
C
11
=
P
1
+
P
4
−
P
5
+
P
7
{\displaystyle C_{11}=P_{1}+P_{4}-P_{5}+P_{7}}
C
12
=
P
3
+
P
5
{\displaystyle C_{12}=P_{3}+P_{5}}
C
21
=
P
2
+
P
4
{\displaystyle C_{21}=P_{2}+P_{4}}
C
22
=
P
1
+
P
3
−
P
2
+
P
6
{\displaystyle C_{22}=P_{1}+P_{3}-P_{2}+P_{6}}
の関係が成り立つ。
この関係を利用して計算すると、部分行列同士の乗算が、通常の方法では8回必要なのに、この方法では7回ですむようになり、計算時間が削減される。部分行列への分割を再帰 的に行うことにより、さらに計算時間を削減することができる。
^ a b 奥村晴彦 『C言語による最新アルゴリズム事典』技術評論社 、1991年、51頁。ISBN 4-87408-414-1 。
^ Strassen, Volker, Gaussian Elimination is not Optimal , Numer. Math. 13, p. 354-356, 1969
関連文献 [ 編集 ]
Ushiro, Y. (1998). An extension of Strassen's algorithm on matrix multiplication, Hitachi, Ltd. General Purpose Computer Division.
解説記事 [ 編集 ]
Huang, J., Smith, T. M., Henry, G. M., & van de Geijn, R. A. (2016, November). Strassen's algorithm reloaded. In Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis (p. 59). IEEE Press.
Gates, A. Q., & Kreinovich, V. (2001). Strassen's Algorithm Made (Somewhat) More Natural: A Pedagogical Remark. Bulletin of the EATCS, 73, 142-145.
Grochow, J. A., & Moore, C. (2017). Designing Strassen's algorithm. arXiv preprint arXiv:1708.09398.
Ikenmeyer, C., & Lysikov, V. (2017). Strassen's 2x2 matrix multiplication algorithm: A conceptual perspective. arXiv preprint arXiv:1708.08083.
精度保証付き数値計算 [ 編集 ]
荻田武史, 大石進一 , & 後保範. (2003). Strassen のアルゴリズムによる行列乗算の高速精度保証 (微分方程式の数値解法と線形計算). 京都大学数理解析研究所 講究録.
森山敦史, 荻田武史, 後保範, & 大石進一 . (2004). 拡張 Strassen 法による連立一次方程式の精度保証 (数値解析と新しい情報技術). 京都大学数理解析研究所 講究録.