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

提供: testwiki
ナビゲーションに移動 検索に移動

シュトラッセンのアルゴリズム(Strassen algorithm)は、行列の積を高速に計算するアルゴリズムである。通常、N×N行列同士の積を計算するにはO(N3)の時間が必要だが、このアルゴリズムを用いると、O(Nlog27)O(N2.807)の時間で計算できる[1]1969年フォルカー・シュトラッセンが開発した[1][2]

便宜上、Nを偶数と考えて、以下のようにN2×N2部分行列に分解する。

(C11C12C21C22)=(A11A12A21A22)(B11B12B21B22)

そして、以下の七つの行列をつくる。

P1=(A11+A22)(B11+B22)
P2=(A21+A22)B11
P3=A11(B12B22)
P4=A22(B21B11)
P5=(A11+A12)B22
P6=(A21A11)(B11+B12)
P7=(A12A22)(B21+B22)

このとき、

C11=P1+P4P5+P7
C12=P3+P5
C21=P2+P4
C22=P1+P3P2+P6

の関係が成り立つ。

この関係を利用して計算すると、部分行列同士の乗算が、通常の方法では8回必要なのに、この方法では7回ですむようになり、計算時間が削減される。部分行列への分割を再帰的に行うことにより、さらに計算時間を削減することができる。

脚注

テンプレート:脚注ヘルプ テンプレート:Reflist

関連文献

  • 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.

精度保証付き数値計算

テンプレート:Linear algebra

  1. 1.0 1.1 テンプレート:Cite book
  2. Strassen, Volker, Gaussian Elimination is not Optimal, Numer. Math. 13, p. 354-356, 1969