展開されたコアアルゴリズム


307

アルゴリズムの重要性を実証するために(例えば、理論やまったく異なる分野の学生や教授にとっても)、コアアルゴリズムが商用、政府、または広く使用されているソフトウェア/ハードウェア。

私は次の基準を満たすような例を探しています:

  1. アルゴリズムを使用するソフトウェア/ハードウェアは、現在広く使用されているはずです。

  2. 例は具体的である必要があります。特定のシステムおよび特定のアルゴリズムへの参照を提供してください。
    たとえば、「アルゴリズムXは画像処理に役立つ」では、「画像処理」という用語は十分に具体的ではありません。「Google検索でグラフアルゴリズムを使用する」では、「グラフアルゴリズム」という用語は十分に具体的ではありません。

  3. アルゴリズムは、一般的な学部生または博士号で教える必要があります。アルゴリズムまたはデータ構造のクラス。理想的には、アルゴリズムは典型的なアルゴリズムの教科書でカバーされています。たとえば、「よく知られたシステムXはあまり知られていないアルゴリズムYを使用します」は良くありません。


更新:

素晴らしい回答とリンクをありがとう!コアアルゴリズムは広範にわたるため、特定の用途を示すのが難しいため、基準を満たすのは難しいと言う人もいます。難しさを感じます。しかし、私の経験では、人々に「見て、アルゴリズムはどこにでもあるので重要だ!」動作しません。


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ビョルンジョスハンセン

回答:


473

私の意見では、システムの背後にある主要なドライバーであるアルゴリズムは、アルゴリズムなしのコースで見つけるのが簡単です。同じ理由で、即時適用の定理は純粋な数学のコースよりも応用数学で見つけるのが簡単です。実際の問題が講義の抽象的な問題の正確な構造を持つことはまれです。議論の余地はありませんが、Strassenの乗算、AKS primality test、Moser-Tardosアルゴリズムなどのファッショナブルなアルゴリズムコース教材が、ビデオデータベース、最適化コンパイラ、オペレーティングシステムの実装の低レベルの実用的な問題に関連する理由はありません、ネットワーク輻輳制御システムまたはその他のシステム。これらのコースの価値は、問題の構造を活用して効率的な解決策を見つけるための複雑な方法があることを学習することです。高度なアルゴリズムは、分析が簡単ではない単純なアルゴリズムに出会う​​場所でもあります。このため、単純なランダム化アルゴリズムまたはPageRankは無視しません。

どんな大きなソフトウェアでも選択して、そこに実装されている基本的かつ高度なアルゴリズムを見つけることができると思います。ケーススタディとして、Linuxカーネルでこれを実行し、Chromiumのいくつかの例を示しました。

Linuxカーネルの基本的なデータ構造とアルゴリズム

リンクはgithubソースコードです。

  1. リンクリスト二重リンクリストロックフリーリンクリスト
  2. 教科書にはないものを伝えるコメント付きのB +ツリー

    比較的単純なB + Tree実装。B + Treesの仕組みを理解するための学習課題として作成しました。同様に有用であることが判明しました。

    ...

    教科書にはあまり見られないトリックが使用されました。最低値は左ではなく右です。ノード内のすべての使用済みスロットは左側にあり、すべての未使用スロットにはNUL値が含まれています。ほとんどの操作は、すべてのスロットで1回ループし、最初のNULで終了します。

  3. ミューテックスドライバーなどに使用される優先順位のソートされたリスト

  4. 赤黒ツリーは、ファイル記述子やディレクトリエントリなどを追跡するために、スケジューリング、仮想メモリ管理に使用されます。
  5. インターバルツリー
  6. 基数ツリーはメモリ管理、NFS関連の検索、およびネットワーク関連の機能に使用されます

    基数ツリーの一般的な使用法は、構造体ページへのポインターを格納することです。

  7. コントロールグループシステムで使用される、文字通り、教科書の実装である優先度ヒープ

    CLRに基づく、ポインターを含む単純な挿入専用の静的サイズの優先度ヒープ、第7章

  8. Knuthと論文への参照を含むハッシュ関数

    Knuthは、乗法ハッシュのマシンワードで表現可能な最大整数に対して、ほぼ黄金比の素数を推奨しています。チャックレバーは、この手法の有効性を検証しました。

    http://www.citi.umich.edu/techreports/reports/citi-tr-00-1.pdf

    これらの素数はビットスパースになるように選択されます。つまり、それらの演算は、乗算が遅いマシンでは乗算の代わりにシフトと加算を使用できます。

  9. このドライバーなどのコードの一部は、独自のハッシュ関数を実装しています。

    回転ハッシュアルゴリズムを使用したハッシュ関数

    Knuth、D。The Art of Computer Programming、Volume 3:Sorting and Searching、第6.4章 アディソン・ウェスリー、1973

  10. iノードファイルシステムの整合性チェックなどの実装に使用されるハッシュテーブル
  11. ビット配列。フラグ、割り込みなどの処理に使用され、Knuth Vol。4。

  12. セマフォスピンロック

  13. バイナリ検索は、割り込み処理レジスタキャッシュルックアップなどに使用されます

  14. Bツリーを使用したバイナリ検索

  15. ディレクトリ構成で使用される深さ優先検索とバリアント。

    名前空間ツリーの修正された深さ優先ウォークを実行し、start_handleで指定されたノードで開始(および終了)します。コールバック関数は、typeパラメーターに一致するノードが見つかるたびに呼び出されます。コールバック関数がゼロ以外の値を返す場合、検索はすぐに終了し、この値が呼び出し元に返されます。

  16. 幅優先検索は、実行時のロックの正確性を確認するために使用されます。

  17. リンクリストのマージソートは、ガベージコレクションファイルシステム管理などに使用されます

  18. バブルソートもドライバーライブラリに驚くほど実装されています。

  19. Knuth-Morris-Pratt文字列マッチング

    Knuth、Morris、Prattによる線形時間文字列マッチングアルゴリズムを実装します[1]。それらのアルゴリズムは、遷移関数DELTAの明示的な計算を完全に回避します。マッチング時間はO(n)です。nはlength(text)であり、補助関数PI [1..m]のみを使用し、mはlength(pattern)であり、時間O(m)のパターンから事前計算されます。配列PIにより、必要に応じて「オンザフライ」で遷移関数DELTAを効率的に計算できます。大まかに言って、SIGMAの状態 "q" = 0,1、...、mおよび文字 "a"の場合、値PI ["q"]には、 "a"に依存せず、 DELTA( "q"、 "a")2を計算します。配列PIにはm個のエントリしかありませんが、DELTAにはO(m | SIGMA |)エントリがあるため、| SIGMA |の係数を保存します デルタではなくPIを計算することにより、前処理時間で。

    [1] Cormen、Leiserson、Rivest、Stein Introdcution to Algorithms、第2版、MIT Press

    [2]有限自動化理論を見る

  20. 代替手段を優先する場合の参照と推奨事項を備えたボイヤー・ムーアのパターン・マッチング

    Boyer-Moore文字列照合アルゴリズムを実装します。

    [1]高速文字列検索アルゴリズム、RS Boyer and Moore。Association for the Association for Computing Machinery、20(10)、1977、pp.762-772 http://www.cs.utexas.edu/users/moore/publications/fstrpos.pdf

    [2]完全一致文字列アルゴリズムのハンドブック、Thierry Lecroq、2004 http://www-igm.univ-mlv.fr/~lecroq/string/string.pdf

    注:Boyer-Moore(BM)は右から左に一致の検索を実行するため、一致が複数のブロックに広がる可能性があります。その場合、このアルゴリズムは一致を見つけられません。

    そのようなことが絶対に起こらないようにしたい場合は、代わりにKnuth-Pratt-Morris(KMP)実装を使用してください。結論として、設定に応じて適切な文字列検索アルゴリズムを選択してください。

    テキスト検索インフラストラクチャをフィルタリング、NIDS、または
    同様のセキュリティに焦点を当てた目的に使用しているとしたら、KMPに進みます。それ以外の場合、パフォーマンスが本当に重要な場合は、パケットを分類してQuality of Service(QoS)ポリシーを適用し、複数のフラグメントに広がる可能性のあるマッチングを気にしないと言ってから、BMに進みます。

Chromium Webブラウザのデータ構造とアルゴリズム

リンクは、Googleコード上ソースコードへのリンクです。ほんの少しだけリストします。検索機能を使用して、お気に入りのアルゴリズムまたはデータ構造を検索することをお勧めします。

  1. スプレイツリー

    ツリーは、割り当てポリシー(アロケーター)によってパラメーター化されます。このポリシーは、Cフリーストアまたはゾーンでリストを割り当てるために使用されます。zone.hを参照してください。

  2. デモではボロノイ図が使用されます。
  3. Bresenhamのアルゴリズムに基づくタブ移動
Chromiumコードに含まれるサードパーティコードには、このようなデータ構造とアルゴリズムもあります。

  1. 二分木
  2. 赤黒の木

    ジュリアン・ウォーカーの結論

    赤黒の木は面白い獣です。それらはAVLツリー(その直接の競合他社)よりも単純であると考えられており、挿入は簡単なので、一見するとこれが当てはまるようです。ただし、削除アルゴリズムの使用を開始すると、赤黒の木が非常に扱いにくくなります。ただし、この追加された複雑さに対するカウンターウェイトは、挿入と削除の両方をシングルパストップダウンアルゴリズムを使用して実装できることです。これは、挿入アルゴリズムのみをトップダウンで記述できるAVLツリーの場合ではありません。AVLツリーからの削除には、ボトムアップアルゴリズムが必要です。

    ...

    赤黒木は、気まぐれな名前を持つほとんどのデータ構造として人気があります。たとえば、JavaおよびC ++では、ライブラリマップ構造は通常、赤黒ツリーで実装されます。赤黒の木も速度がAVL木に匹敵します。バランスはそれほど良くありませんが、バランスを維持するために必要な作業は通常、赤黒の木の方が優れています。いくつかの誤解が浮かんでいますが、ほとんどの場合、赤黒の木に関する誇大広告は正確です。

  3. AVLツリー
  4. 圧縮には、Rabin-Karp文字列照合が使用されます。
  5. オートマトンの接尾辞を計算します
  6. Apple Inc.によって実装されたブルームフィルター
  7. ブレゼンハムのアルゴリズム

プログラミング言語ライブラリ

検討する価値があると思います。プログラミング言語の設計者は、一部のエンジニアがこれらのデータ構造とアルゴリズムを実装するのに時間と労力を費やす価値があると考えたため、他のエンジニアは必要ありませんでした。ライブラリの存在は、Cで記述されたソフトウェアで再実装された基本的なデータ構造を見つけることができる理由の一部ですが、Javaアプリケーションではそうではありません。

  1. C ++のSTLはのためのリスト、スタック、キュー、マップ、ベクター、およびアルゴリズムを含んで検索し、ヒープ操作、並べ替え
  2. Java APIは非常に広範囲で、さらに多くをカバーしています。
  3. ブーストC ++ライブラリはボイヤー-ムーアとクヌース-モリス-プラット文字列照合アルゴリズムのようなアルゴリズムが含まれています。

割り当てとスケジューリングのアルゴリズム

これらはヒューリスティックと呼ばれますが、使用するポリシーによって必要なアルゴリズムとデータ構造のタイプが決まるため、スタックとキューについて知る必要があるため、これらは興味深いと思います。

  1. 最長時間未使用は、複数の方法で実装できます。リストベースの実装 Linuxカーネルインチ
  2. 他の可能性は、先入れ先出し、最低使用頻度、ラウンドロビンです。
  3. FIFOのバリアントがVAX / VMSシステムで使用されました。
  4. クロックアルゴリズムによってリチャード・カーは、 Linuxでのページフレームの交換のために使用されています。
  5. Intel i860プロセッサは、ランダム交換ポリシーを使用しました。
  6. Adaptive Replacement Cacheは、一部のIBMストレージコントローラーで使用されており、PostgreSQLでも使用されていましたが、特許上の懸念のために短時間しか使用されていません
  7. バディメモリ割り当てアルゴリズム TAOCP VOLにクヌースによって議論されています、。1はLinuxカーネルで使用され、jemallocコンカレントアロケーターはFreeBSDおよびfacebookで使用されます。

* nixシステムのコアユーティリティ

  1. grepawkはともに、正規表現からのNFAのThompson-McNaughton-Yamada構築を実装します。
  2. tsortは、トポロジカルソートを実装します。
  3. fgrepは、Aho-Corasick文字列照合アルゴリズムを実装しています。
  4. GNU grepのはボイヤー-ムーアのアルゴリズムを実装して、著者のMike Haertelによります。
  5. Unixのcrypt(1)は、エニグママシンで暗号化アルゴリズムのバリアントを実装しました。
  6. James Huntと共同で作成されたプロトタイプに基づいてDoug McIllroyによって実装された Unix diffは、レーベンシュタイン距離の計算に使用される標準の動的プログラミングアルゴリズムよりも優れたパフォーマンスを発揮します。Linuxバージョンは、最短編集距離を計算します。

暗号化アルゴリズム

これは非常に長いリストになる可能性があります。暗号化アルゴリズムは、安全な通信またはトランザクションを実行できるすべてのソフトウェアに実装されています。

  1. マークルツリー、特にTiger Tree Hashバリアントは、GTK GnutellaLimeWireなどのピアツーピアアプリケーションで使用されていました。
  2. MD5は、ソフトウェアパッケージのチェックサムを提供するために使用され、* nixシステム(Linux実装)の整合性チェックに使用され、WindowsおよびOS Xでもサポートされます。
  3. OpenSSLは、AES、Blowfish、DES、SHA-1、SHA-2、RSA、DESなどを含む多くの暗号化アルゴリズムを実装しています。

コンパイラー

  1. LALR解析は、yaccとbisonによって実装されます。
  2. ドミネーターアルゴリズムは、SSA形式に基づくほとんどの最適化コンパイラで使用されます。
  3. lexおよびflexは、正規表現をNFAにコンパイルします。

圧縮と画像処理

  1. GIF画像形式のLempel-Zivアルゴリズムは、* nixユーティリティから複雑なプログラムへの変換から始まる画像操作プログラムに実装されています。
  2. ランレングスエンコーディングは、PCXファイル(元のPaintbrushプログラムで使用)、圧縮BMPファイル、およびTIFFファイルの生成に使用されます。
  3. ウェーブレット圧縮はJPEG 2000の基礎であるため、JPEG 2000ファイルを生成するすべてのデジタルカメラがこのアルゴリズムを実装します。
  4. Reed-Solomonエラー修正は、Linuxカーネル、CDドライブ、バーコードリーダーに実装されており、Voyagerからの画像送信用の畳み込みと組み合わせられました。

競合駆動節学習

2000年以降、産業ベンチマークでのSATソルバーの実行時間(他のソースも使用されていますが、通常はハードウェア業界から)は、毎年ほぼ指数関数的に減少しています。この開発の非常に重要な部分は、Davis LogemannとLovelandのオリジナルペーパーのブール制約伝搬アルゴリズムと、制約プログラミングおよび人工知能研究に由来する条項学習の手法を組み合わせた競合駆動節学習アルゴリズムです。特定の産業モデリングでは、SATは簡単な問題と見なされます(この説明を参照してください)。私にとって、これは最近の最大のサクセスストーリーの1つです。これは、数年にわたるアルゴリズムの進歩、巧妙なエンジニアリングアイデア、実験的評価、および問題を解決するための共同の努力を組み合わせているためです。マリクとZhangのCACMの記事は良い読み物です。このアルゴリズムは多くの大学で教えられています(私は4つの大学に通っていました)が、通常はロジックまたは正式なメソッドクラスです。

SATソルバーのアプリケーションは多数あります。IBM、Intel、および他の多くの企業には、独自のSATソルバーの実装があります。OpenSUSE のパッケージマネージャーもSATソルバーを使用します。


5
@ HuckBennett、CDCLはヒューリスティックによってパラメーター化されたアルゴリズムですが、それ自体はヒューリスティックではありません。最悪の場合の指数関数的な振る舞いがありますが、それを示すのは簡単ではありません。さらに、私たちは立証できるほど良いことをすることはできず、実際にできることは最高です。だから私はすべてのコンピューター科学者がそれについて知っておくべきだと思います!LRU、FIFOなどについては、ヒューリスティックですが、ARCの場合と同様に、実装するには巧妙なアルゴリズムまたはデータ構造が必要になる場合があります。
ヴィジェイD

9
このようなコメントはシンプレックスに適用されませんか?最初はよく理解されておらず、後に指数関数的であることが示されましたが、実際には機能し、後に多項式平滑化された複雑さを持つことが示されましたか?CDCLは、アルゴリズムの分析にとって興味深いものです。これは、証明の複雑さを介して、最悪の場合の振る舞いを示す式のファミリーを導き出す必要があるためです。そのような分析がまだ開かれている対称性の破れやアウタルキー法など、さまざまな拡張機能があります。
ヴィジェイD

28
これは、学生のための宝物です
neo1691

2
@EmanueleViola、さらにいくつかの例を追加しました。投稿は今長いので、私はそれを拡張したくありません。Linux、Chrome、Webサーバーなどの実際のシステムの一部としてのダイクストラ、シンプレックス、ブルームフィルターの実装について、具体的に新しい質問をする必要があるかもしれません。
ビジェイD

4
ハッカーのニュースとR /プログラミング。
ヴィジェイD

40

PageRankは、最もよく知られているこのようなアルゴリズムの1つです。Googleの共同設立者であるLarry Pageと共著者によって開発され、Googleの元の検索エンジンの基礎を形成し、当時の競合他社よりも優れた検索結果を達成するのに役立ったと広く信じられています。

あるWebページから開始し、ランダムリンクを繰り返しクリックして新しいページに移動する「ランダムサーファー」を想像します。質問は、「各ページでサーファーが費やす時間の割合は?」です。サーファーがページで過ごす時間が長いほど、そのページはより重要と見なされます。

より正式には、インターネットは、ページがノードであり、リンクが有向エッジであるグラフとして表示します。次に、サーファーのアクションをグラフ上のランダムウォークとして、または同等に遷移行列マルコフ連鎖としてモデル化できます。マルコフ連鎖がエルゴード的であることを確認するためにいくつかの問題を処理した後(ページに発信リンクがない場合、サーファーはどこに行くのか?)、マルコフ連鎖の定常状態分布としてサーファーが各ページで費やす時間を計算します。M

アルゴリズム自体はある意味簡単です。大きなと任意の初期分布に対してを計算するだけ。これは、繰り返される行列-行列または行列-ベクトル乗算に相当します。アルゴリズムの内容は、主にセットアップ(エルゴードマルコフチェーンに一意の定常状態分布があることを証明するエルゴード性の確保)と収束分析(スペクトルギャップに依存)にあります。 K π 0 MMkπ0kπ0M


7
これは典型的なアルゴリズムの資料ではないと思います。
マヌー

14
ちなみに、私は最初にアルゴリズムクラスでPageRankについて学びました。実際、教授は「実際に使用されているアルゴリズム」の良い例だからだと思います。サンプルを「CLRSの前半」タイプの素材に限定すると、サンプルのリストが長すぎるか、または取るに足らないものになります。クイックソート、Bツリー、およびダイクストラのアルゴリズムはいたるところにあります。
ハックベネット

2
学部生にPageRankを教えています。
アーロンロス

6
私はそれを学部生にも教えています(必要なアルゴリズムクラスと、より専門的なグラフアルゴリズム選択科目の両方)。
デビッドエップシュタイン

2
選択科目の学部生としてPageRankを学びました。
ヴィジェイD

33

線形計画問題を解くためのシンプレックス法/アルゴリズムの広く使用されているソフトウェアCPLEX(または同様の)実装について言及します。これは、経済および運用の研究で(?)最も使用されているアルゴリズムです。

「数学の問題が世界のほとんどのコンピューター時間を消費しているという統計をとるなら、(ソートや検索などのデータベース処理の問題は考慮せずに)おそらく答えは線形プログラミングでしょう。」(L。Lovász、A線形計画法アルゴリズム-シンプレックス法より良いか悪いか?Math。Intelligencer 2(3)(1979/80)141-146。)

シンプレックスアルゴリズムは、理論上も大きな影響を及ぼします。たとえば、(多項式)ハーシュ予想を参照してください。

典型的な学部生または博士号だと思います。アルゴリズムのクラスは、シンプレックスアルゴリズム(ガウス消去法のような線形代数からの基本アルゴリズムを含む)を扱います。

(ソート用のクイックソートを含む他の成功したアルゴリズムは、本のアルゴリズムにリストされてい ます。)


「経済とオペレーションズリサーチ」は具体的ではありません。CPLEXは、アルゴリズムの単なる実装であるため、私が探していたタイプの例でもありません。たとえば、gccコンパイラがシンプレックスメソッドを使用した場合は異なります。
マヌー

12
私たちが経済とORについて話すとき、「線形計画問題」は十分に具体的だと思います。また、CPLEXによって、実装の背後にあるアルゴリズムを意味しました。
vb le

16
「今日、ほとんどの大企業は線形計画法を使用して製品の価格設定とサプライチェーンの管理を行っています。輸送会社はこれを使用して、世界中の分散サプライヤからの多くの製品の出荷を統合し、調整し、容量の制約を受ける遠方の市場にルーティングする最も安価な方法を選択します。石油鉄鋼業界では、鉄鉱石の評価、コークス炉の追加の検討、製品の選択に使用しています... " news.stanford.edu/news/2005/may25/ dantzigobit-052505.html
Sashoニコロフ

ありがとう。しかし、引用はひどくあいまいです。あるクラスの学生の前で、半分は眠りにつくと言ったら、UPSは次のように言うと違うでしょう:UPSはLPを使ってパッケージを次のように発送します...私はそのような例を言っていません見つけるのは簡単ですが、「ほとんどの大企業がLPを使用している」ことを考えると、少なくとも1つを指すことができると思います。
マヌー

10
2007年以来、LAX(空港)はStackelbergのゲームを解決するためにソフトウェアを使用してセキュリティ担当者のスケジュールを組んでいます。大きなLPを解決することは全体の一部です。例:teamcore.usc.edu/ARMOR-LAXを参照してください。それに加えて、私はあなたのオペレーションズ・リサーチ部門からの誰かに頼む:彼らは通常、実際の生活の中でLPを使用する方法について戦争の話をたくさん持っているだろう
Sashoニコロフ

30

私が理解しているように、National Resident Matching Programは長い間、安定した結婚の問題に対するGale-Shapleyアルゴリズムのまっすぐな適用でした。その後、配偶者の割り当て(別名「2体問題」)などの追加の詳細を処理するために、わずかに更新されました。


安定した結婚が典型的なアルゴリズム素材であるかどうかはわかりません。
マヌー

16
これはTardos and Kleinberg Algorithms Designブックにあり、MotwaniのRandomized Algorithmsにもあり、両方の本が広く使用されています。安定した結婚は、アルゴリズムコースで普遍的に教えられるわけではありませんが、多くの人で確かに教えられています。
サショニコロフ

10
クイック検索は、それが中まで示してきたことが明らかになったバークレーのCS70MITの6.042UMDのCMSC451、等...
mhum

1
興味深いことに、配偶者の割り当てを追加すると、問題はNP-complete:arxiv.org/abs/1308.4534になります。しかし、実際には、これは問題のあまりを引き起こすことがないようだ。en.wikipedia.org/wiki/...
ジョシュアGrochow

2
@EmanueleViolaは伝統的にカバーされていないかもしれませんが、Kleinberg / Tardosの本に含まれていることで、より人気があります(そうでない場合は!)
Suresh Venkat

24

PhDレベルのものも含める場合、多くの(ほとんどの?)大学院CSプログラムには、コーディング理論のコースが含まれています。コーディング理論のコースがある場合は、コンパクトディスクの動作に不可欠なリードソロモンコードと、JPEG、MP3、およびZIPファイル形式で使用されるハフマンエンコーディングを確実にカバーします。コースの向きに応じて、GIF形式で使用されるLempel-Zivもカバーできます。個人的に、私は学部のアルゴリズムコースでLempel-Zivを取得しましたが、それは非定型かもしれません。


1
そして、私はプロジェクトに必要な学部生としてのハフマンエンコーディングに関する講義を受けました。
ブライアンS

ハフマンはCLRSの最初の章の1つであるため、間違いなく資格があります
サショニコロフ

21

GNU grepは、指定されたパターンに一致する行を含む1つ以上の入力ファイルを検索するためのコマンドラインツールです。grepが非常に高速であることはよく知られています!ここではその作者(から取られたマイクHaertelからの引用だここには):

GNU grep uses the well-known Boyer-Moore algorithm, which looks first for the
final letter of the target string, and uses a lookup table to tell it how far
ahead it can skip in the input whenever it finds a non-matching character.

19

より一般的には、カネラキス賞は、実際に大きな影響を与えたまさにそのような理論的発見に対してACMによって授与されます。

2012年の賞は、局所性に敏感なハッシュに対するものです。これは、近隣問題のデータマイニングにおける次元削減のための重要な方法になりました(少なくともアルゴリズム自体は比較的簡単に教えることができます)


これは教えることができると思うが、広く教えられていない。
マヌー

3
残念ですが、本当です。ただし、LSHのバリアント(Count-minスケッチや親類など)は、「大規模データ」または「データマイニング」コースに登場し始めています。たとえば、アルゴリズムクラスでブルームフィルターを教えています。
Suresh Venkat

個人的な経験として、LSHは「ビッグデータ」(100mlnアイテム)のインスタンスではスケールしませんでした。
lynxoid

1
@lynxoidそれは別の議論/質問です:)。この特定の質問に関係があると思うので、それ機能する場所の十分な例があります。
Suresh Venkat

18

ε

これらのデータ構造の産業利用の例は次のとおりです。

  • 非構造化データ分析用のGoogleのSawzallシステムは、Count Sketchを使用して「最も人気のあるアイテム」機能を実装します
  • ネットワークトラフィック監視用のAT&TのGigascope「ストリームデータベース」システムは、CountMinスケッチを実装しています。
  • Sprintの連続監視(CMON )システム CountMinを実装しています。

また、CountMinのアプリケーションに関する情報を収集するサイトもあります

教育に関しては、プリンストンで学部の離散数学コースで基本的なスケッチ技法が教えられていることを知っています。最初のアルゴリズムコースでCountMinスケッチを教えられました。いずれにせよ、CountMinの分析は、他のほぼすべてのランダム化アルゴリズムの分析よりも単純です。これは、ペアごとの独立性とマルコフの不等式の単純な適用です。これがほとんどのアルゴリズムコースで標準的な資料でない場合、歴史的な理由によるものだと思います。


1
優れた例(現時点ではコアアルゴリズムとは言えませんが)。
マヌー

16

過去10年間に、さまざまな腎臓ドナーマッチングプログラムを通じて、腎臓移植の数(および品質、私は思う?)を増やすためにアルゴリズムが使用されてきました。私はこれに関する最新のニュースを見つけるのに苦労してきましたが、少なくともいくつかのポインタがあります:

  • 2007年には、Paired DonationのAllianceは、Abraham、Blum、およびSandholmのアルゴリズムを使用していました。彼らはまだそれを使っているかもしれませんが、オンラインで検索しても見つけられませんでした。このアルゴリズムは「標準」コースではほとんどカバーされていませんが、そのようなコースで確実に教えられているいくつかの基本的なアイデアを組み合わせて、一般にNP完全(サイクルカバーの変形)の問題に対して十分なアルゴリズムを提供します)。

  • National Kidney Registryは、CPLEXを含む(ある時点で)標準的なアルゴリズムも使用します。これは60人をリンクする実際に実行された移植のチェーンにつながりました。

これは、アルゴリズムの成功だけでなく、NP完全問題のアルゴリズムの研究の重要性の私のお気に入りの例の1つです。彼らは文字通り命を救うことができ、すでにそうしています!


また、これらのアルゴリズムのより単純なバージョンは、ボードゲームの取引に使用されます:okasaki.blogspot.co.uk/2008/03/what-heck-is-math-trade.html
ラドゥグリゴール

15

Viterbiのアルゴリズムは、音声認識や他の複数のアプリケーションでまだ広く使用されています。http//en.wikipedia.org/wiki/Viterbi_algorithmアルゴリズム自体は基本的な動的プログラミングです。

ウィキペディアから:「Viterbiアルゴリズムは、1967年にAndrew Viterbiによって、ノイズの多いデジタル通信リンク上のたたみ込みコードのデコードアルゴリズムとして提案されました。[1]このアルゴリズムは、CDMAおよびGSMダイヤルアップモデム、衛星、深宇宙通信、802.11無線LAN。現在、音声認識、音声合成、キーワードスポッティング、計算言語学、およびバイオインフォマティクスでも一般的に使用されています。たとえば、音声からテキスト(音声認識)、音響信号は観測されたイベントシーケンスとして扱われ、テキストの文字列は音響信号の「隠れた原因」と見なされます。


13
  1. A *は多くのパーソナルナビゲーションデバイス(別名GPSユニット)で使用されます
  2. A *は非常に明確に定義されており、かなり簡単に実装されています。
  3. A *は完全に些細なことではありませんが、博士号は取得しません。それを理解する。

A *は、ゲームデザインでも頻繁に教えられます。最近の3Dゲームは一般にNPCナビゲーションにA *を使用する思わないが、2D /等尺性ゲームは古いゲームと同様にアルゴリズムを使用する。
ブライアンS

@BrianS 3Dゲーム、特にゲームの敵NPC(シューティングNPCなど)で使用される経路探索アルゴリズムの例を知っていますか? 、そしてそれはよりスムーズな動きを可能にしました。
グッドワイン

@Goodwine、申し訳ありませんが、3Dゲームの経路探索アルゴリズムの実例はありません。私の個人的な経験は、「​​キューブ」のような環境(キューブで作られたマップ、キャラクターが立つ-基本的には3Dレンダリングにもかかわらず2D)と、プレイヤーキャラクターのテストに使用されるダミーAIです。
ブライアンS

12

Jens VygenのプロジェクトBonnTools for Chip Designをご覧ください。 http://www.or.uni-bonn.de/~vygen/projects.html これに関するいくつかの講演を聞いたことがあり、彼らの論文のいくつかも見ました。Raghavan-Thompsonスタイルのランダム化された丸めと、大規模なマルチコモディティフローLPを解くための乗法的重み更新法を使用します。ただし、他の大規模プロジェクトと同様に、エンジニアリングも行う必要がありますが、方法論はよく知られたアルゴリズムに基づいています。


見ていきますが、典型的なアルゴリズムの資料のようには聞こえません。
マヌー

8
うーん、ランダム化された丸めは通常、PhDレベルのアルゴリズムコースで教えられますか?
チャンドラチェクリ

2
なぜランダム化された丸めか?Sanjeev Arora、Elad Hazan、およびSatyen Kaleは、乗算レベルの更新方法でさえUGレベルで教えるのに十分基本的であると考えています:)分割統治法、ダイナミックプログラミング、ランダムサンプリングなどを使用して、すべてのアルゴリズムの学生に教えました。」(cf. cs.princeton.edu/~arora/pubs/MWsurvey.pdf)。
ジャガディッシュ


10

上記のすべての派手なアルゴリズムで、伝説的なLempel-Zivファミリーの圧縮アルゴリズム(1977/78年に発明された)について誰も言及しなかったことに、私はかなり驚いています。

  1. これらはどこでも使用されます-テキストから画像、ストリーム処理へ。LZ *が現存する単一の最も使用されているアルゴリズムファミリーである可能性は十分にあります。
  2. 辞書圧縮は、圧縮理論の大きなブレークスルーであり、シャノン・ファノスタイルのアプローチとはまったく異なります。
  3. このファミリのアルゴリズムは、かなり簡単で理解しやすいものです。

更新

どうやらすでに簡単に言及されたようです。


10

特異値分解(SVD)は、統計的因子分析または主成分分析と密接な関係があり、学部の線形代数または統計クラス内で理解可能であり、多くの重要な理論的特性を備えています。また、画像圧縮アルゴリズムでも役割を果たします。Netflix100万ドルの賞品コンテスト(歴史上世界最大のデータマイニングコンテストの 1つ)の入賞作品で重要な要素を果たし、ユーザーの評価を予測するためにサイトに実装されました。また、生物学的理論に由来するヘブの自己組織化ニューラルネットワークと非常に関連していることも知られています。

また、機械学習および人工ニューラルネットワークで広く使用されている勾配降下法と、非常に普遍的に適用される最適化手法として、ニュートン法が基本的な2d形式であるいくつかの接続があります。SVDを取得するための勾配降下アルゴリズムがあります。


10

オイラーの経路を見つけることは、ゲノムアセンブリの基礎にあります-ゲノム全体(バイオインフォマティクス、医学、法医学、生態学)で作業するときに一般的に実行されるタスクです。

更新この明らかなものを忘れてしまった:UPS、フェデックス、USPSはすべて、毎晩トラベリングセールスマン問題の大規模なインスタンスを解決する必要があります。彼らが最適なルートでドライバーを送るために多くの時間とお金を節約します。

UPDATE2最小フィードバック頂点セット問題は、多くのOSでデッドロックの解決に使用されます。


TSPは、宅配業者が解決しようとしている問題であると確信していますか?大きな実用的な課題は、ナップザックなどの梱包の問題だと思いました。
アンドラスサラモン

ドライバーの割り当ては毎日変わるため(UPSの人は毎日同じ家に行く必要はありません)、ルートを毎日更新する必要があります。それは純粋なTSPではありません-一方通行の通り、Uターンなし、通りの片側に荷物を配達するなどの追加の制約がありますが、反対側にはありません。
lynxoid

梱包も重要だと思います。
lynxoid

9

私は、最大マッチングアルゴリズムに基づいて、腎臓移植で英国の最大の命の数を節約するこのシステムが好きです:ペアドおよび利他的な腎臓の寄付。彼らは、同じ状況にいる他の人々と最大限の方法で寄付する意思のない友人/親族がいる腎臓を必要とする人々をマッチングします。その後、寄付の日に、すべての寄付者が同時に寄付を行い、その後、腎臓を迅速に国中のレシピエントに運びます。


8

この比較的新しい本は、便利で拡張/収集された形式の質問に対する完全/詳細な回答として検討する価値があり、アルゴリズムクラスの補足資料として使用できます。[これらのいくつかはすでに言及されています。強い重なり自体が注目に値します。]


2nd refは、もともとは米国物理学会とIEEE Computer Societyの共同出版物であるComputing in Science&Engineeringの2000年1月/ 2月号からのものです。テネシー大学およびオークリッジ国立研究所のゲストエディタージャック
ドンガラ


6

非常に基本的なアルゴリズムを考える

  1. 乱数ジェネレーターはどこにでもあり、特にすべてのゲームにあります。
  2. データベースは、B +、ハッシュ、優先度キュー、正規表現、暗号化、並べ替えなど、多くのアルゴリズムで構成されています。私の友人は、SGBDがコンピューティングフードチェーンのトップにいると言います。
  3. 並べ替えは、Excelなど、あらゆる場所で使用されます。実際には実際に使用されていますが、通常、人間はアドホックアルゴリズムを使用します
  4. パリティビットはすべての場所で使用されます
  5. ハフマン符号化は圧縮および伝送ソフトウェアにあります
  6. スタック(LIFO)はどこでも使用されます。内部プログラミング言語、CPUなど

彼らが実生活に登場するのを見せてうれしいです:

A.多くのグループは、電話リストを階層的な方法で人々に分割することにより、一種のカバリングツリーアルゴリズムを使用して通信します。B。交差点の車は通常、ラウンドロビンアルゴリズム(自発的)を使用します。病院、クライアントをFIFOアルゴリズムで整理する


4
ソートはアルゴリズムではありません。これはタスク、つまり実行したいことであり、そのためにアルゴリズムを設計(または実際には選択)する必要があります。
デビッドリチャービー

これらは質問で要求された特定の例ではないようです。
カヴェー

SGBD == RDBMS FYI知らない人のために。
Autodidact

6

CTスキャンの医療アプリケーションでは、魅力的なアルゴリズムの問​​題が発生します。コンピューター断層撮影(CT)では、身体はさまざまな角度からのX線に曝されます。スキャナーの一方の端にはX線トランスミッターがあり、もう一方の端にはセンサーがあります。このような一連のスキャンから、医師が検査できるように画像が再構築されます!

フィルタ補正逆投影 アルゴリズムは、スキャンのセットから画像を再構成するための基礎です。このアルゴリズムは、実際には、「信号」がナイキストレート未満でサンプリングされる近似問題の形式です。このアルゴリズムはすべての病院で「舞台裏」で使用されており、基本的なフィルター逆投影では、フーリエ変換などの学部数学を利用して、フーリエスライス定理を実現しています。


6

FFTの例

FFTアルゴリズムを別のシステム言語に移植するのを手伝ったことがあります。

このアルゴリズムは、ケーブルテレビ/インターネット/電話の同軸配信での改行を決定するために使用されていました。基本的に、技術者は顧客のボックスに送信される信号を要求すると同時に、QoS、dBなどの特定の顧客の統計情報のリアルタイム表示を引き出します。技術者は、データと、家屋と極の間の数フィート以内で、部分的な破損(または、言われたように複数の破損)が存在する場所を特定するためのグラフ。

前述のように、FFTは広く使用されていますが、これは実際に見た(理由と方法に関して)より露骨で明白なものの1つでした。

申し訳ありませんが、高レベルを維持する必要がありました。


5

Bresenhamのラインアルゴリズムは、私が遭遇した中で最も有用な単一のアルゴリズムです。わかりやすいIveは、線描画から3Dキャストエンジン用の複雑なスプライナー、複雑なポリゴンレンダラー、および複雑なアニメーションとスケーリングの使用まで、多くのアプリケーションに使用しました。



2

ウィキペディアには、リストに多少分類されたアルゴリズム/アプリケーションのまともなコレクションがあります。マイクロソフトは、引用されトップペーパーを提供していますが、コンピューターサイエンスの分野やアプリケーションの明確な説明はありません。また、Huang教授が編集したさまざまなCS会議_http://jeffhuang.com/best_paper_awards.html_の時系列リストもあります。

スペクトルクラスタリングはエレガントなクラスタリングアルゴリズムであり、Jianbo ShiおよびJitendra Malikによって画像セグメンテーションのために導入されたNormalized cutsアルゴリズムとして知られています。また、データクラスタリングアプリケーションでも十分に開発されており、2つのコミュニティがうまく交差しています。


-2

個人的にお気に入りの2つの例は、コンピュータサイエンスに根ざしたものですが、過去数十年にわたって日々の生活に大きな/変容的な進歩を遂げ、大規模から大規模な実用的/応用的な影響を与えた抽象主義の理論家によって簡単に見落とされている可能性があります。すでに、世代なしで、世界を知らずに成長しました。基本的にはモデリングとシミュレーションのカテゴリです。

  • 物理シミュレーションアルゴリズム。主にニュートンの法則を使用しますが、他の法則(流体力学など)を使用します。エンジニアリングアプリケーション、ビデオゲーム、時には映画など、さまざまなアプリケーションで使用されます。これは、仮想/テスト設計をシミュレートされたストレスにさらすことにより、たとえば車や飛行機の安全性、効率、または信頼性を大幅に改善することにも責任があります。バイオインフォマティクスからの主要な関連する進行中の研究分野、例えば薬物設計、疾病予防など、生物学に大きな影響を与える:タンパク質の折りたたみ/構造予測。また、今年は化学シミュレーションでノーベル化学賞がワルシェル、レビット、カープラスに授与されたことに留意してください。物理シミュレーションアルゴリズムは、核兵器の安全性/テストに深く関与しています 例:ロスアラモス研究所。

  • レイトレーシング/ CGIアルゴリズム。これはほんの数十年前に研究トピックとして始まりました[友人はレイトレーシングアルゴリズムを書くCSで修士号を取得しました]が、たとえばゲームや映画作成ビジネスで非常に応用され、膨大な量の映画の特殊効果。これらの産業は文字通り数十億ドルを投資し、これらのアルゴリズムに乗っており、大企業全体がそれらを活用することに基づいています、例えばPixar。ほとんどが最初はたとえばSF映画で使用されていましたが、現在ではこの技法は広く普及しており、「典型的な」映画でも日常的に使用されています。たとえば最近では、グレートギャツビー 説得力のある、または定型化された環境を描き、フィルム/キャラクターをレタッチするなど、CGIエフェクトに大きく依存していました。


-3

Rosetta Codeは、プログラミングタスク(692)およびSemantic MediaWikiのプログラミング言語(518)によって適用されたアルゴリズムをリストします。


これは、「コアアルゴリズム...商用、政府、または広く使用されているソフトウェア/ハードウェアで展開された」例です。
デヴィッドリチャービー

ここの他の回答にリストされている優れたアルゴリズムのそれぞれの実装を、Wikipedia / DBpedia URIに相互参照すると便利です。これらのアルゴリズムのすべてにWikipedia / DBpedia URIはありません。しかし、Rosetta Codeページがあります。
ウェスターナー

また、bigocheatsheet.comには、Big-Oの複雑さと、かなりの数のアルゴリズムのウィキペディアの記事へのリンクがリストされています。
ウェスターナー

この質問は、ソフトウェアの重要な部分で使用されるコアアルゴリズムの例を求めています。「これは百万言語で実装されたアルゴリズムを備えたウェブサイトです」という質問にはまったく答えていません。実際、それは質問が探しているものの正反対です。
デビッドリチャービー

それにもかかわらず、有用な、コンテキストに関連する参照。
ウェスターナー

-5

多分、この聴衆にとって興味のあるすべての主要な/好ましいアルゴリズムがこの時点で言及されているでしょう。ただし、完全を期すためにもう少し言及する価値があります。ここでは、重要なアルゴリズムと見なされるものの分析が関連しています。

CS&IT分野では、AIで「ゴールポストの移動」と呼ばれる現象がずっと前に気づいたようです。これは心理的現象であり、フィールドは比較的急速に進歩しますが、人々はすぐに精神的に「新しい標準」に適応し、達成された後、つまり軽視または最小化された後、現実的または画期的な進歩を振り返ります。これは、アルゴリズムがR&Dから「展開」に移行する方法で、この質問で非常に捉えられています。質問の著者を後のコメントで引用する:

実際、記述されるすべてのコードのごく一部が、アルゴリズムの観点から興味深いものを実装しています。

しかし、これは問題であり、基本的には「アルゴリズム」という言葉のTCS中心の再定義です。おそらく、興味深いアルゴリズムは高度です。それは、問題が高度なアルゴリズムに縮小された場合、もはや「面白くない」ことを意味しますか?「高度な」は明らかに動いている目標です。そのため、「アルゴリズム」を狭く、または広く定義する方法があります。TCSの定義は状況に応じて変化するように見えますが、TCSでも、たとえばいわゆる「アルゴリズムレンズ」など幅広い定義に向かう傾向があることに注意してください。

時々、最も遍在するアルゴリズムが最も見過ごされていることもあります!インターネットとWWWは、アルゴリズムの大規模な環境/生態系です。まだ約20年で比較的若く(1991年に発明)、短時間で大規模かつ指数関数的に成長しました。WWWサイトの成長は、おそらく有名な指数関数的なムーアの法則さえも上回っています。

インターネット/ WWWは、多くの高度なアルゴリズムによってサポートされています。インターネットにはルーターに組み込まれた複雑なルーティングアルゴリズムがあります(ここでも、Ciscoなどの数十億ドル規模の企業に電力を供給しています)。そこにはルーティングアルゴリズムなどの高度な理論が適用可能です。これらのアルゴリズムは、数十年前に出現した先進的/最先端の研究の対象でしたが、現在は微調整されており、ある程度見えないほどよく理解されています。

数十年前、一流の研究者がインターネットの世界が機能するか可能かどうかさえ知らなかったことをすぐに忘れてはなりません(初期のパケット交換研究、以前の回線交換から逸脱した当時の根本的な新しい設計パターンで見られます)、そして数年前でさえ、ある時点でスケーリングに失敗し、圧倒的なボリュームの急増により失敗し始めるという懸念がありました。

また、高度なエラー検出/修正も使用します。インターネットはおそらく今までに人間によって構築され最大で最も耐障害性のあるシステムであり、現在も成長しています。

次に、WWWを駆動するアルゴリズムが高度であることを証明する強力なケースがあります。HTTPおよびWebサーバーは高度に調整/最適化されており、高度なセキュリティ/暗号化プロトコル(HTTPS)も使用しています。Webページのレンダリングロジックは、Javascriptプログラミング言語とともにHTML5およびCSS3で非常に高度になりました。

比較的新しいCSSには、再利用性や継承など、OOPプログラミングに似たさまざまな原則があります。組版について言えば、TeXはKnuthによって発明された重要な内部的に複雑な科学的な組版システム(プログラミング言語とそれほど変わらない)であり、Webページでレンダリングできるようになりました(そしておそらく数十万以上の科学論文で使用されています)。

インターネット上に構築された別の比較的新しいアルゴリズムの領域は、まだ知られていませんが、集合知に基づいています。stackexchangeソフトウェア自体は、洗練された集合知能システムの例です。ソーシャルネットワーキングは、集合知能の主要な機能も示しており、その知能を高めるために機能が継続的に追加されています(たとえば、フェイスブック「いいね」はほんの数年前です)。評価システムの分野は、共同フィルタリングアルゴリズムに基づいており、新しい研究とアプリケーションに基づいて進化しています。

つまり、要するに、すべての革命的な成功は、実際の単なる「現場の目標」をはるかに超えて、日々の人間の経験を変えています。質問のタイトルが示すように、すべてのコアアルゴリズムが展開されています。今では、「配管の一部」というIT表現のように、どこにでもあり、目に見えないものです。


これに多くの引用を追加できます。ここから始めましょう:DARPAと Waldropによるインターネット革命
vzn

インターネット最適化の別の参照、ダニー・ルーウィンの伝記、アカマイの共同創立者で、「インターネットを変換天才」
vzn

-8

驚くほど成功した(ハードウェア)アルゴリズムは、パワーオンリセットです。

電源が投入されたときにコンピューターが既知の状態になるシステムがなければ、他に何も起こりません

パワーオンリセットは、CPUが組み込まれているかどうかに関係なく、CPUを搭載したものがすべて機能する理由です。

次にプログラマーやコンピューターサイエンティストの水飲み場に行くときは、チェリーソーダのグラスをパワーオンリセットに上げてください。


5
パワーオンリセットはアルゴリズムではありません。これはタスク、つまり実行したいものであり、アルゴリズムを設計する必要があります。
デビッドリチャービー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.