シュトラッセンのアルゴリズム
[Wikipedia|▼Menu]

シュトラッセンのアルゴリズム(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頁。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:26 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef