行列乗算アルゴリズムの実行時間を分析するために使用される計算モデルはどれですか?


7

行列乗算アルゴリズム(Strassenのアルゴリズムなど)の漸近ランタイムについてはすでに学習しましたが、この複雑さを測定するために使用される計算モデルへの明示的で満足のいく参照は見つかりませんでした。実際、私は3つの可能な答えを見つけましたが、どちらも完全に満足できるものではないようです。

  • ウィキペディアによると、ここで使用されているモデルはマルチテープチューリングマシンです。マトリックス乗算の分析では、スカラー乗算は一定の時間複雑さを持つと想定されているため、これは私にはあまり意味がありません。これは、チューリングマシンには当てはまりません。
  • 一部のテキストは、使用される算術演算の数として複雑さを漠然としか説明していません。しかし、この文脈での算術演算は正確には何ですか?その加算、乗算、そしておそらく減算だと思います。しかし、除算、整数除算、剰余などはどうですか?そして、ビット単位の操作についてはどうでしょうか-これらはどのようにこの設定に適合しますか?
  • 最後に、最近、BSSマシンを計算モデルとして使用する記事を発見しました。しかし、これは私にとっても少し奇妙に思えます。たとえば、整数行列の場合、整数除算などの操作を禁止することはあまり意味がありません。

これらを整理するのを手伝ってくれるだれでもに感謝します。


複雑さのために、私たちはTMのステップという1つの尺度だけを気にします。アルゴリズム分析では、「基本操作の数」よりも正確なものを取得することはほとんどありません。これは、プロセッサの基本的なALU /メモリアクセス操作にほぼ対応しています。問題の複雑さではなく、アルゴリズム分析を求めていると思いますか?
ラファエル

@Raphael「複雑さのために、私達は1つの測定だけについて気にします:TMのステップ。」申し訳ありませんが、それは完全に誤りです。まず、チューリングマシンではない計算モデルがたくさんあります。たとえば、回路です。次に、幾何学的で記述的な複雑さなどを取得します。チューリングマシンの領域でも、空間は時間と同じくらい重要な尺度です。そして、どんなチューリングマシン?確定的、非確定的、交互、および確率的なマシンはすべて、異なるリソース要件を持っています。「多項式時間」よりも細かい分類が必要な場合、ランダムアクセスは重要です。
David Richerby 14

@DavidRicherby:すべて正しい。私たちの声明は互換性があります。私は自分の範囲をより明確にすべきでした。「P、NPなどのクラシッククラスで考慮される時間の複雑さについては、気にします...」。
ラファエル

@Raphaelしかし、これはP、NPなどに関する質問ではありません。特定の問題に関する質問です。問題の上限にはアルゴリズム分析が含まれるため、2つを分割することは実際には不可能だと思います。そうはいっても、Strassenなどの複雑さは、標準の計算モデルではなく、「算術演算」で表現されているようです。
デビッドリッチャービー2014

2番目のアプローチ(算術演算のカウント)について:各演算(乗算、加算、ビットごとの演算など)の数を個別に単純にカウントできます。たとえば、Sedgewick&Flajolet:Introduction of the Analysis of Algorithms(アルゴリズムはQuicksortを非常に正確に分析します)でその例を見つけることができます。行列の乗算では、含まれる乗算の数が残りの部分を支配すると私は信じています。したがって、基本的にはそれを数えています。
john_leo 14

回答:


7

行列乗算アルゴリズムは、計算の複雑さの観点から分析されます。計算モデルは、次の形式の命令を持つ直線プログラムです。abc、 どこ {+,,×,÷}a 変数であり、 b,c変数、入力、または定数のいずれかです。さらに、特定の変数は出力として区別されます。たとえば、2つを乗算する方法は次のとおりです2×2 通常のアルゴリズムを使用した行列と入力行列 aij,bij および出力行列 cij

x11a11×b11y11a12×b21c11x11+y11x12a11×b12y12a12×b22c12x12+y12x21a21×b11y21a22×b21c21x21+y21x22a21×b12y22a22×b22c22x22+y22
複雑さの尺度は、プログラムの行数です。

行列乗算の場合、すべてのアルゴリズムの正規形を証明できます。すべてのアルゴリズムを次の形式のアルゴリズムに変換できますが、複雑さは一定の乗法的に増加するだけです。

  1. 特定の線形結合 αi 入力行列の ajk 計算されます。
  2. 特定の線形結合 βi 入力行列の bjk 計算されます。
  3. γiαi×βi
  4. 出力行列の各エントリは、次の線形結合です。 γis。

これは双一次正規形として知られています。上記の行列乗算アルゴリズムでは、xjk,yjk として機能 γiただし、Strassenのアルゴリズムでは、線形結合の方が興味深いです。彼らはMi「でね、ウィキペディアの説明

Strassenのアルゴリズムの漸近分析に類似したテンソルアプローチ(つまり、同じアルゴリズムを再帰的に適用する)を使用すると、 × 行列 r 製品(ie r 変数 γ)、次に任意 N×N 行列は複雑に乗算できます ONログr; したがって、製品の数のみが漸近的に重要になります。Strassenのアルゴリズムでは、=2 そして r=7、したがって、境界は ONログ27

行列の乗算を計算するために必要な最小数の積を見つける問題は、3次テンソル(2つではなく3つのインデックスを持つ「行列」)のランクを見つけることと言い換えることができ、これは代数的複雑性理論への接続を形成します。詳細については、この本またはこれらの講義ノートここに続きます)を参照してください


このモデルが使用される理由は2つあります。1つ目は、非常にシンプルで分析が容易であることです。2つ目は、より一般的なRAMモデルと密接に関連しています。

直線プログラムはRAMモデルに実装でき、両方のモデルの複雑さは強く関連しています。算術演算は、モデルのいくつかのバリアント(たとえば、実数のRAMモデル)でユニットコストを持ち、それ以外の場合は多項的に関連します。数字のサイズに。したがって、モジュラーマトリックス乗算の場合、算術計算の複雑さがRAMモデルの複雑さの上限となります。整数または有理行列の乗算の場合、テンソル化の結果として生じる双一次アルゴリズムの場合、数値のサイズが大きくなりすぎないため、算術的な複雑さがRAMモデルの上限を対数係数まで提供することを示すことができます。

RAMマシンが、算術モデルが気付かないいくつかのトリックを引き出すことができるのは、アプリオリかもしれません。しかし、多くの場合、行列乗算アルゴリズムが任意のフィールド(またはリング)上の行列に対して機能することを望みます。その場合、均一アルゴリズムはモデルで指定された算術演算のみを使用する必要があります。したがって、このモデルは「フィールドに依存しない」アルゴリズムを形式化したものです。


チューリングマシンのモデルはありますか?
T ....

必要ないことがわかりました。通常、チューリングマシンを導入して均一性を導入します。。私が説明したモデルは不均一ですが、最適な指数に近づくことができることがわかりますω より均一ないくつかの行列サイズに良いアルゴリズムを総当たりすることにより、均一に
Yuval Filmus、2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.