Strassenのアルゴリズム
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Strassenのアルゴリズムは、行列の積を高速に計算するアルゴリズムである。通常、n×n行列同士の積を計算するにはO(n3)時間必要だが、このアルゴリズムを用いると、時間で計算できる。1969年、Volker Strassenが開発した。
便宜上、nを偶数と考えて、以下のようにn/2×n/2部分行列に分解する。
そして、以下の七つの行列をつくる。
P1 = (A11 + A22)(B11 + B22)
P2 = (A21 + A22)B11
P3 = A11(B12 − B22)
P4 = A22(B21 − B11)
P5 = (A11 + A12)B22
P6 = (A21 − A11)(B11 + B12)
P7 = (A12 − A22)(B21 + B22)
このとき、
C11 = P1 + P4 − P5 + P7
C12 = P3 + P5
C21 = P2 + P4
C22 = P1 + P3 − P2 + P6
の関係が成り立つ。
この関係を利用して計算すると、部分行列同士の乗算が、通常の方法では8回必要なのに、この方法では7回ですむようになり、計算時間が削減される。部分行列への分割を再帰的に行うことにより、さらに計算時間を削減することができる。