ポール・エルドスは、神がそれぞれの数学的定理の最もエレガントな証拠を保持している「本」について話しました。これは、本(現在は第4版になっていると思います):本からの証拠にも影響を与えました。
もし神がアルゴリズムに関する同様の本を持っていたら、どのアルゴリズムが候補者になると思いますか?
可能であれば、クリック可能なリファレンスと、それを機能させる重要な洞察も提供してください。
回答ごとに1つのアルゴリズムのみを入力してください。
ポール・エルドスは、神がそれぞれの数学的定理の最もエレガントな証拠を保持している「本」について話しました。これは、本(現在は第4版になっていると思います):本からの証拠にも影響を与えました。
もし神がアルゴリズムに関する同様の本を持っていたら、どのアルゴリズムが候補者になると思いますか?
可能であれば、クリック可能なリファレンスと、それを機能させる重要な洞察も提供してください。
回答ごとに1つのアルゴリズムのみを入力してください。
回答:
Union-findは美しい問題であり、その最適なアルゴリズム/データ構造(Disjoint Set Forest)はスパゲッティスタックに基づいています。インテリジェントな子供に説明するのに十分なほど単純で直感的ですが、実行時間に厳しい制約を課すには数年かかりました。最終的に、その振る舞いは逆アッカーマン関数に関連することが発見されました。これは、発見が計算についての視点の変化を示した関数です(実際、ヒルベルトのOn the Infiniteに含まれていました)。
ウィキペディアは、Disjoint Set Forestsの優れた紹介を提供しています。
Knuth-Morris-Prattストリングマッチング。これまでで最も滑らかな8行のコード。
並べ替えられていないリストのk番目の要素を線形時間で見つけるためのBlum、Floyd、Pratt、Rivest、およびTarjanのアルゴリズムは美しいアルゴリズムであり、数値がマスター定理にちょうど適合するためにのみ機能します。次のようになります。
バイナリ検索は、私が今まで遭遇した中で最もシンプルで美しく、便利なアルゴリズムです。
ここで、すべてのペアの最短パスのFloyd-Warshallアルゴリズムが表示されないことに驚いています。
d[]: 2D array. d[i,j] is the cost of edge ij, or inf if there is no such edge.
for k from 1 to n:
for i from 1 to n:
for j from 1 to n:
d[i,j] = min(d[i,j], d[i,k] + d[k,j])
最短で最も明確な非自明なアルゴリズムの1つであり、エッジがある可能性があると考えると、パフォーマンスは非常に速くなります。それは、動的プログラミングのポスターの子になります!O (n 2)
(特に他の回答と比較して)多少些細なことのように思えるかもしれませんが、Quicksortは本当にエレガントだと思います。私はそれを最初に見たとき、私はそれが本当に複雑だと思ったのを覚えていますが、今ではそれはあまりにも単純に見えます。
ミラー-ラビン素数判定法(と同様の試験)がブックにあるべきです。アイデアは、素数の性質を利用して(すなわち、フェルマーの小さな定理を使用して)素数でない数の証人を確率的に探します。十分なランダムテストの後に証人が見つからない場合、番号は素数として分類されます。
その点で、PRIMESがPにあることを示したAKSの素数性テストは、確かにThe Bookにあるはずです!
Schwartz-Zippel補題を使用した多項式同一性テスト:
誰かが深夜に目を覚まして、同一性について2つの単変量多項式をテストするように要求した場合、おそらくそれらを積和正規形に減らし、構造的同一性を比較するでしょう。残念ながら、この削減には指数関数的な時間がかかります。これは、ブール式を選言標準形に縮小することに似ています。
あなたがランダム化されたアルゴリズムを好む種類であると仮定すると、次の試みはおそらく反例を求めてランダムに選択された点で多項式を評価し、十分なテストに合格した場合に同一である可能性が高い多項式を宣言することです。Schwartz-Zippelの補題は、ポイントの数が増えると、偽陽性の可能性が非常に急速に減少することを示しています。
多項式時間で実行される問題の決定論的アルゴリズムは知られていません。
深さ優先検索。これは、他の多くのアルゴリズムの基礎です。また、あるdeceivinglyシンプル:たとえば、あなたがスタックによってBFS実装でキューを交換する場合は、DFSを得るのですか?
ダイクストラのアルゴリズム:非負のエッジパスコストを持つグラフの単一ソース最短パス問題。どこでも使用されており、最も美しいアルゴリズムの1つです。インターネットはそれなしではルーティングできませんでした-それはルーティングプロトコルIS-ISおよびOSPF(Open Shortest Path First)の中核部分です。
エラトステネスのふるいシンプル&直感的な、。
ホーナーのアルゴリズムの美しさも気に入っています。
Gentryの完全準同型暗号化スキーム(理想的な格子上または整数上の)は非常に美しいです。サードパーティは、秘密キーにアクセスすることなく、暗号化されたデータに対して任意の計算を実行できます。
暗号化スキームは、いくつかの鋭い観察によるものです。
彼の論文では、Craig Gentryは暗号化における長年の(そして豪華な)未解決の問題を解決しました。完全に準同型なスキームが存在するという事実は、計算可能性に固有の構造が存在することを認識させることを要求します。
http://crypto.stanford.edu/craig/craig-thesis.pdf
行列乗算のための Strassenのアルゴリズム。
ゲイル・シャプレー安定結婚アルゴリズム。このアルゴリズムは貪欲で非常に単純であり、なぜそれが機能するかは最初は明らかではありませんが、その後、正確性の証明は再び理解しやすくなります。
接尾辞配列を構築するための線形時間アルゴリズムは本当に美しいですが、実際に値する認識を受け取っていませんでしたhttp://www.cs.helsinki.fi/u/tpkarkka/publications/icalp03.pdf
ガウス消去。ユークリッドGCDアルゴリズムからKnuth-Bendixへの一般化シーケンスを完了します。
貯水池サンプリングのアルゴリズムとその証明を見たとき、私は感銘を受けました。非常にシンプルなソリューションを備えた典型的な「頭の体操」タイプのパズルです。それは間違いなく本に属していると思います。それはアルゴリズムと数学の定理の両方のためです。
本については、エルデスが死んで天国に行ったときに、神と会うように要求したという話があります。リクエストは承諾され、会議のためにエルデスは1つの質問しか持っていませんでした。「本を見てもいいですか?」神はイエスと言い、エルデスをそれに導いた。当然、非常に興奮して、エルドスは次を見るためだけに本を開きます。
定理1:...
証明:明白。
定理2:...
証明:明らかです。
定理3:...
証明:明らかです。
ウサギとカメアルゴリズム。私はそれを見つけようとして一生を無駄にしたとしても、そのようなアイデアを思い付く方法がないと確信しているので、私はそれが好きです。
私は常に、メトリックTSPに(3/2)近似を与えるChristofidesのアルゴリズムに偏っていました。実際、私に喜んで電話してください、しかし、私はそれの前に来た2-approximationアルゴリズムさえ気に入りました。(すべてのエッジを複製するのではなく)奇数次の頂点のマッチングを追加することによって最小のスパンニングツリーオイラーを作成するクリストフィデスのトリックはシンプルでエレガントであり、このマッチングがウェイトの半分以下であることを確信させることはほとんどありません最適なツアーの。
ソートのマージ。シンプル、エレガント、効率的。
線形計画法のアルゴリズム:シンプレックス、楕円、および内点法。
Marcus Hutterのすべての明確に定義された問題に対する最速かつ最短のアルゴリズム。
この種は、このリストの他の製品の精神に反します。なぜなら、理論的なものであり、実用的なものではないからです。おそらく、それはアルゴリズムの漸近的な振る舞いだけを見る人たちのための警告物語として含まれるべきです。
KnuthのアルゴリズムXは、正確なカバー問題のすべての解を見つけます。それについてとても不思議なのは、彼がそれを効率的に実装するために提案したテクニック:Dancing Linksです。
Schieber-Vishkinを含める必要があります。これは、一定の時間で最も一般的な祖先クエリに応答し、線形時間でフォレストを前処理します。
私は、第4巻ファシクル1でのクヌースの説明と彼の黙想が好きです。彼はそれを完全に理解するのに丸二日かかったと言った、そして私は彼の言葉を覚えている:
とても美しいと思いますが、驚くべきことに文学で悪い報道を受けています(..)それは私を刺激する数学に基づいています。