web-dev-qa-db-ja.com

Strassenはどのようにして彼の行列乗算法を考え出しましたか?

有名な Strassenの行列乗算アルゴリズム は、従来のO(n)からO(n2.8)。

しかし、私が経験したすべてのリソースの中で、CormenやSteven Skiennaの本でさえ、Strassenがそれについてどのように考えたかについては明らかに述べていません。

Strassenの行列乗算アルゴリズムの理論的根拠は何ですか?これは幸運な事故ですか、それとももっと深い事故ですか?

18
user1369975

Strassenを除いて、Strassenがどのようにして彼のアイデアを得たのか、誰にも説明できません。代数幾何学と表現理論に興味があるとすれば、ハヴェーバー、その公式を自分でどのように見つけたのかを教えてくれます。これはまた、Strassenの式ができる限り正確であることを示すためのツールを提供します7未満の乗算を使用する2つの2×2行列の積を計算する式はありません

行列に興味があるので、基本的な線形代数を知っていると思います。より高度な詳細については少しぼやけます。

最初に[〜#〜] e [〜#〜]を平面から平面へのすべての線形マップのセットとします。これは基本的にすべての2×2行列のセットですが、特定の座標系を忘れてしまいます。なぜなら、「デフォルトの座標系」よりも優れた座標系がある場合、行列の乗算にそれを使用することに興味があるからです。 E†[〜#〜] e [〜#〜]の双対空間とX = P(E⊗E†⊗ E†)テンソル積に関連する射影空間E⊗E†⊗E†

特別な形式のX = P(E⊗E†⊗E†)の要素[c⊗α⊗β]は、行列の基本演算として解釈できます。これは、一部の適切な座標系では、行列の係数[〜#〜] a [〜#〜]と行列の係数[〜#〜] b [〜を読み取ります#〜]そして、これらの係数の積をいくつかの行列[〜#〜] c [〜#〜]に書き込みます。 [〜#〜] x [〜#〜]の一般的な要素は、これらの基本演算の組み合わせであるため、2つの行列の積πは、以下のマップとして理解されます。 P(E)×P(E)からP(E)、[〜#〜] x [〜#〜]のポイントです=。

通常の行列積の式とStrassenの式は、これらの線形演算の組み合わせとして表すことができるため、W₁これらの基本演算のセット[c⊗α⊗β]で示します。 =そして、それらの組み合わせを幾何学的に説明させてください。

W₂をさまざまなものとしようsecantsW₁ in X。は、( )W₁の2つの(一般的な)ポイントを通るすべての線の和集合。これは、2つの要素操作のすべての組み合わせのセットとして考えることができます。

W₃を多様なものとしよう割線W₁X。は、 the)W₁の3つの(一般的な)ポイントを通過するすべての平面の結合。これは、3つのエレメンタリー操作のすべての組み合わせのセットとして考えることができます。

同様に、より大きなインデックスのために割線変種を定義します。これらの変種はどんどん大きくなることに注意してくださいW₁⊂W₂⊂W₃⊂⋯したがって、古典的な行列積の式は、行列の積がW₈の点であることを示しています。実は

PROPOSITION(Strassen)—行列の積πW₇。にあります

私の知る限り、Strassenはそのように述べていませんでしたが、これはこの質問に対する幾何学的な観点です。この観点は、Strassenの公式が最良であること、つまりπW₆にないことを証明できるため、非常に便利です。ここで開発された幾何学的手法は、幅広い問題にも使用できます。

私はあなたの好奇心をつかんだと思います。 LandsbergとManivelによるこの記事を読んで、さらに進んでください。

http://arxiv.org/abs/math/0601097

a風邪を引いたので、このタイプミスは修正しません。

26
user40989

私は宿題のためにこれを行うことを任されたばかりで、私はきちんとしたひらめきを持っていると思いました:Strassenのアルゴリズムは、より少ない操作を使用するためにその事前合計コンポーネントの「幅」を犠牲にします最終的な回答を抽出するために引き続き使用できる「より深い」事前合計コンポーネントと交換します。(これは最も良い方法ではありませんが、説明するのは難しいです) 。

2つの複素数を乗算する例を使用して、「演算とコンポーネント」のバランスを説明します。

The equation for complex numbers.

4つの乗算を使用することに注意してください。結果は4つの製品コンポーネントになります。

We have 4 product components.

必要な2つの最終コンポーネント、つまり複素数の実数部と虚数部は、実際には線形方程式であることに注意してください。これらはスケーリングされた積の合計です。したがって、ここでは2つの演算を扱います:additionmultiplication。

実際、私たちの4つの製品コンポーネントは、私たちの2つの最終コンポーネントを表すことができますコンポーネントを単に加算または減算する場合:

Our product components can represent our final ones.

しかし、最後の2つのコンポーネントは、製品の合計として表すことができます。これが私が思いついたものです:

We actually only need 3 distinct product components.

ご覧いただければ、実際に必要なのは3つの異なる製品コンポーネントだけで、最後の2つを作成します。

Our 3 distinct components.

ちょっと待って!それぞれの大文字はそれ自体が製品です!しかし、問題は、(a + b)(c + d)から(A + B + C + D)を生成できることがわかっていることです。

したがって、最終的には、アルゴリズムは最適化され、使用量は少なくなりますが、「より太い」コンポーネントが使用され、乗算の量がより多くの加算演算と交換されます。

これを可能にするものの一部は、A(B + C)が(AB + AC)と同等になることを可能にする分散プロパティです。 1つ目は1つの加算と1つの乗算演算を使用して計算でき、2つ目は2つの乗算と1つの合計を必要とすることに注意してください。

Strassenのアルゴリズムは、より多くのターゲット製品条件と、取得に使用できる製品コンポーネントの可能性があることを除いて、複素数製品に適用した最適化の拡張ですそれらの用語。 2x2行列の場合、Strassenのアルゴリズムは、8つの乗算が必要なアルゴリズムを7つの乗算が必要なアルゴリズムにモーフィングし、分布プロパティを利用して2つの乗算を1つの演算に「マージ」し、代わりに新しい「fatter」ノードから取り出して1つを抽出します。商品期間その他.

良い例:(-1)と(2)と(5)を取得するには、それを(-1)、(2)、(5)と考えるか、または(2-3 )、(2)、(2 + 3)。ただし、2番目の操作では、あまり明確でない数値を使用します。問題は、個別の数値の数は、行列の乗算を計算するために必要な製品コンポーネントの数と同じであることです。これを最適化するだけで、分布プロパティを通じて異なるバリエーションを使用して同型出力を活用する基本的な操作の特定のビューを見つけます。

おそらくこれは、何らかの形でトポロジーにリンクされているのでしょうか?これは私の素人のそれを理解する方法です。

編集:これは、複素数の説明を行う過程で描いた私のメモの画像です。

Some notes for figuring out the complex number part.

3
CinchBlue