どの計算モデルが「最良」ですか?


41

1937年、チューリングはチューリング機械について説明しました。それ以来、実際のコンピューターに似ているが、アルゴリズムを設計および分析するのに十分なほど単純なモデルを見つけようとして、多くの計算モデルが記述されてきました。

その結果、たとえば、さまざまな計算モデルのSORT問題など、多数のアルゴリズムがあります。残念ながら、ビットベクトル演算が許可されたワードRAMでの実行時間O(n)のアルゴリズムの実装が、実行時間O(n⋅logn)のアルゴリズムの実装よりも速く実行されることを確信することさえできません。ワードRAM(もちろん、「良い」実装についてのみ話しています)。

そのため、既存のモデルのどれがアルゴリズムの設計に「最適」であるかを理解したいと思います。また、モデルの長所と短所、および現実に近いことを示す計算モデルに関する最新かつ詳細な調査を探しています。


1
ここにリダイレクトされますが、MathOverflow(mathoverflow.net/questions/44558/…)にクロスポストされます。
デイブクラーク

@Tatiana、良い質問、「最高」とはどういう意味ですか?「実際の」実行時間に近い理論的な実行時間を持つモデルを意味しますか?
モハマドアルトルコ人

8
「実際の」実行時間を正確にモデル化する場合は、キャッシュを正確にモデル化することが重要であると思われます。特に、最新のコンピューティングには多くのキャッシュ層(CPU、RAM、ディスクなど)があり、一部の層は他の層よりも桁違いに遅くなっています。キャッシュミスの数によってアルゴリズムの「実際の」ランタイムが決定されることは問題ではありません。逸話的に、私は、線形プログラミングのバリアメソッドが、理論上の保証が貧弱であるにもかかわらず、非常に優れたパフォーマンスを発揮する理由の1つは、キャッシュ効率が非常に高いためだと聞きました。
mhum

4
私の知る限り、mhumが言うように、ワードRAMモデルでの予測実行時間と実際の実行時間の最大の不一致は、一般にデータ検索のために発生します...間違った変数がキャッシュメモリにあり、検索時間が遅くなりますこのために非常にダウンします。理論的な階層メモリモデルを使用してこれをモデル化しようとする試みは何度もありましたが、これらの試みはいずれも非常に成功したとは思いません。
ピーターショー

2
実際に役立つと思われるアルゴリズムがあり、それが実際に使用されていることを確認したい場合、これを確実にするためにできる最善のことは、それを実装するか、他の誰かにそれを実装させることです(たとえそれが良くなくても実用的なソフトウェアに組み込むのに十分な実装)。このケーススタディについては、LZWデータ圧縮アルゴリズムの歴史をご覧ください。実際、キャッシングがアルゴリズムにどのように影響するかを理解することは、人々が実装に関心を持っているものでない限り、おそらく意味がありません。そうしないと、誰もあなたの結果に注意を払いません。
ピーターショー

回答:


30

私は常に標準のWord RAMモデルをあなたの感覚で「最高」だと考えてきました。Cのような言語(またはJavaなどのゆるい同等物)でプログラミングすることを学んだ人は誰でも、コンピューターについて考えるときにこのモデルを念頭に置いています。

もちろん、あなたが働く政権によっては、一般化が必要な場合があります。外部メモリモデルは、覚えておくべき重要なモデルです。ディスクを操作するときだけでなく、キャッシュを理解する(気にする必要がある)場合にも適用されます。もちろん、純粋に外部メモリモデルは計算をカウントしないため、あまりにも真剣に扱うことは無意味な結果につながる可能性があります。Word RAMのもう1つの一般化は並列処理ですが、現時点では少し混乱しています:)

実行時間のアルゴリズムは、実行時間のアルゴリズムよりも確実に高速に実行されます。前者はが大きいほど高速になることは数学的な事実です:)問題のサイズは、これが問題になるほど大きくない場合があります。ソートを実行するので、合理的な比較ベースのアルゴリズムを使用して基数ソートに勝つことは非常に困難です。O n lg n n nO(n)O(nlgn)nn

アルゴリズムと「現実」に関する最後の発言:達成しようとしていることを常に念頭に置いてください。アルゴリズムで作業するとき、私たちはそこにある最も難しい問題を解決しようとしています(例えば、50変数のSAT、または10億の数字のソート)。200個の数字を並べ替えたり、20個の変数でSATを解こうとする場合、派手なアルゴリズムは必要ありません。それが、実際のほとんどのアルゴリズムが些細なものである理由です。これはアルゴリズム研究について悪いことではありません。たまたま実際の問題の1/1000という珍しいことに興味があります。


ご回答ありがとうございます。どの一般化がワードRAMに追加する価値があるかを理解したいと思います。ビットベクトル演算、並列処理、キャッシュなどのこれらすべてのトリックを含むモデルを説明できますか?
タチアナスタリコフスカヤ

10

悲しいことにアルゴリズムを分析するための完全に満足できる計算モデルは、従来の設定と考えられるものでさえありません。これは、すべてのデータに簡単にアクセスでき、作業スペースが事実上無制限であることを前提としています。

マルチテープチューリングマシンは確かに理論的に十分に指定されており、このモデルでは多くのアルゴリズムが長年にわたって設計および分析されています。しかし、一部の人にとっては、実際のコンピューターが21世紀で使用するのに本当に良いモデルになるためにどのように機能するかとは十分に関連していません。一方、ワードRAMモデルは一般的になり、最新のコンピューターの動作(ビットではなくワードの操作、メモリー位置への一定時間アクセス)をより正確にキャプチャするように見えます。ただし、理想的ではない側面もあります。たとえば、1ワードRAMモデルはありません。最初に、一定の時間内に許可される単語の操作を指定する必要があります。これには多くの選択肢があり、単一の回答はありません。第二に、ワードサイズwは、通常、入力サイズに応じて(少なくともlog(n)と同じくらい速く)成長するように設定され、一定数のワードを使用してメモリ内の任意のアイテムをアドレス指定できるようにします。これは、アルゴリズムが実行されるマシンの無限クラスを想像しなければならないこと、さらに悪いことに、より多くのデータを供給するとマシンが変化することを意味します。これは、少なくとも私の学生の中で最も純粋な人にとっては戸惑う考えです。最後に、word-RAMモデルを使用すると、生徒として学習したものとは一致しないかもしれない、驚くほど複雑な結果が得られます。たとえば、このモデルでは2つのnビット数の乗算はO(n)時間であり、nビット文字列の読み取りは、突然の準線形時間操作です。これは、アルゴリズムが実行されるマシンの無限クラスを想像しなければならないこと、さらに悪いことに、より多くのデータを供給するとマシンが変化することを意味します。これは、少なくとも私の学生の中で最も純粋な人にとっては戸惑う考えです。最後に、word-RAMモデルを使用すると、生徒として学習したものとは一致しないかもしれない、驚くほど複雑な結果が得られます。たとえば、このモデルでは2つのnビット数の乗算はO(n)時間であり、nビット文字列を単に読み取ることは、突然の準線形時間操作です。これは、アルゴリズムが実行されるマシンの無限クラスを想像しなければならないこと、さらに悪いことに、より多くのデータを供給するとマシンが変化することを意味します。これは、少なくとも私の学生の中で最も純粋な人にとっては戸惑う考えです。最後に、word-RAMモデルを使用すると、生徒として学習したものとは一致しないかもしれない、驚くほど複雑な結果が得られます。たとえば、このモデルでは2つのnビット数の乗算はO(n)時間であり、nビット文字列を単に読み取ることは、突然の準線形時間操作です。

そうは言っても、アルゴリズムが高速で実行される可能性があるかどうかだけを知りたい場合は、どちらかを実行する可能性が高くなります:-)


2
「マシンが入力サイズとともに大きくなる」問題を回避するためにビット単位またはワードモデルの算術演算を避けているが、それでも均一コストのRAMまたはポインターマシンを使用している場合、あなたは自分をだましているだけだと思います。他のモデルにも同じ問題があります。入力をどのようにインデックス付けしますか?答えは次のとおりです。実際のコンピューターはメモリを使い果たしますが、RAMであると仮定した場合(またはメモリ階層コストを考慮したモデルを使用したほうがよい場合)、アルゴリズムを設計する方が便利です。 DFA。
デビッドエップシュタイン

4
たとえば、Knuthが説明しているRAMモデルでは、wビットのアドレスをルックアップするのにw時間かかり、同様に2つのwビット数を追加するのにw時間かかります(これにより、2 nを乗算する時間にTheta(n log n) -一定の時間操作を行わないRAMモデルのビット数。過去20年間で最も広く受け入れられているモデルがどのように変化したか、そしてこれ以上議論されないモデルがいくつあるかは興味深いです。
ラファエル

8

モデルは単なるモデルです。押しすぎないようにします。彼らはあなたのアルゴリズムのいくつかの側面について何かを話しますが、完全な真実ではありません。

私は、あなたは、単にあなたの分析で標準語のRAMモデルを使用することを示唆しているアルゴリズムを実装し、それが実際に実行する方法も参照してください。

(実際にアルゴリズムを実行せずに実装するだけで、すでに多くのことがわかります... 1つには、証明可能な実装が可能です。)


3
まあ、私は2つの異議があります。第一に、それほど多くの理論家がアルゴリズムを実装していませんが、どうにかしてそれらを比較します。第二に、モデルのシンプルさを失わずにモデルに追加できるコンピューターの機能を理解したいと思います。
タチアナスタリコフスカヤ

11
これに対するデイビッド・ジョンソンの提案するソリューションは、より多くの人々にアルゴリズムを実装させることです-彼はこれに対処するためにALENEXとDIMACSチャレンジを開始しました。私もこれについていくつかの経験があります。ケン・クラークソンを使って、私は実際にうまく機能すると思ったランダム化された凸包アルゴリズムを考案しました。クラークソンは、ベル研究所の夏の学生にそれを実装してもらいました。この実装の約束に基づいて、アイデアはqhullプログラム(Geometry Centerで作成)に組み込まれましたが、ヒューリスティックな高速化により、アルゴリズムは理論的に高速に実行されるという保証がなくなりました。
ピーターショー

5

計算タスクが(演算)操作(データセットがメインメモリに収まらないほど巨大である)を実行することよりもデータを移動することを重視する場合、I / Oモデル(Aggarwal and Vitterによって1988年に導入された)非常に正確になります。メインメモリ内の要素の大きな配列を並べ替えるようなタスクの場合、I / O最適なアルゴリズムを使用すると役立ちます(慎重な実装で)。

最新のマルチコアコンピューターの場合、2008年にArge、Goodrich、Nelson、およびSitchinavaによって導入された並列バリアントは、正確なモデルになる可能性があります。


5

人生をより複雑にする「最高の」計算モデルを意味する場合は、Wolframの2ステート、3シンボルの汎用チューリングマシンを使用できます。

長所:理性と狂気の間の細い線を歩く感覚以外はありません。

短所:トン...

:-D(冗談だけで、基本的に前の答えに同意します...)


1

より理論的な注意:ナノコンピューターの究極の理論モデルの記事では、可逆3Dメッシュモデルは、他の物理モデルが漸近的に高速化できないという意味で、計算の最適な物理モデルであると主張しています。光の速度、ランダウアーの原理、およびベケンシュタイン限界などの物理的考慮事項について説明します。

要約から引用するには:

現在の技術を使用すると、わずか数百層の回路を含むリバーシブルマシンが既存のマシンよりも優れている可能性があり、ナノテクノロジーに基づいたリバーシブルコンピューターは、可能な不可逆的テクノロジーを上回るために数ミクロンで十分です。

リバーシブル3Dメッシュのシリコン実装は、特定の科学的および工学的計算を高速化するために今日価値がある可能性があると主張し、モデルが幅広い問題の並列アルゴリズムの理論における将来の研究の焦点になるべきであることを提案します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.