シュトラッセンのアルゴリズム

シュトラッセンのアルゴリズム(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回ですむようになり、計算時間が削減される。部分行列への分割を再帰的に行うことにより、さらに計算時間を削減することができる。

脚注

[脚注の使い方]
  1. ^ a b 奥村晴彦『C言語による最新アルゴリズム事典』技術評論社、1991年、51頁。ISBN 4-87408-414-1。 
  2. ^ 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.

精度保証付き数値計算

  • 荻田武史, 大石進一, 後保範「Strassen のアルゴリズムによる行列乗算の高速精度保証 (微分方程式の数値解法と線形計算)」『数理解析研究所講究録』第1320巻、京都大学数理解析研究所、2003年5月、151-161頁、CRID 1050282677273376512、hdl:2433/43088ISSN 1880-2818。 
  • 森山敦史, 荻田武史, 後保範, 大石進一「拡張Strassen法による連立一次方程式の精度保証 (数値解析と新しい情報技術)」『数理解析研究所講究録』第1362巻、京都大学数理解析研究所、2004年4月、47-55頁、CRID 1050001202108508672、hdl:2433/25277ISSN 1880-2818。 
連立一次方程式
ベクトル
ベクトル空間
計量ベクトル空間
行列線型写像
演算・操作
不変量
クラス
行列式
多重線型代数
数値線形代数
基本的な概念
ソフトウェア
ライブラリ
反復法・技法
人物
行列値関数
その他
カテゴリ カテゴリ