Strassenアルゴリズムとは
行列の乗算に対して、時間計算量の愚直な方法より効率よく、で求めることができる方法である。
アルゴリズム
乗算を実施したい行列とを半分に分割する。
すると、
となるが、ここで以下のようなを導入する。
すると、
と表すことができる。で出現する乗算はAとBの半分のサイズの行列演算なので、これを再帰的に実施することで乗算を求めるアルゴリズムである。
時間計算量
行列の乗算にかかる時間計算量をとすると、
途中で
が一般に成り立つことを利用した。
ポイント
が8種類ではなく7種類で十分であるというところに本質がある。仮に、などとして、要素をそれぞれとした場合はpは8種類必要だとわかるが、この場合は時間計算量はとなり愚直な計算と同じ計算量となることがわかる。8回乗算を実施しないといけないように見えて、実は7回で済むという点がポイントである。
補足
Strassenアルゴリズムよりも計算量を落とせるアルゴリズムがあるらしい。こちらの論文には
Denoting by ω the matrix exponent, the quantity such that O(n ω) is the best asymptotic upper bound on the bilinear rank of the product of n × n matrices in C, a lot of contributions [18, 15, 16, 43, 55, 61] improved the upper bound on ω. The best bound known is due to Williams and Le Gall [61] and is equal to 2.3729, although the bound proposed by Coppersmith and Winograd [18], equal to 2.376, is often used as a reference.
とある。
不明点
- の表現はどのように導出されるのか。
参考
www.slideshare.net