web-dev-qa-db-ja.com

過去数十年で人類にとって重要なアルゴリズムはどれですか?

過去数十年で人類に最も貢献した世界で最も重要なアルゴリズムはどれですか?

これは、開発者が知っておくとよい一般的な知識だと思いました。

更新:
可能であれば、特定のプログラミングアルゴリズムへの回答を保管してください。
最も重要なもののリストを取得したいと思います。回答ごとに1つのアルゴリズムのみです。
アルゴリズムが重要かつ重要である理由を説明することを検討してください...

40
Amir Rezaei

公開鍵/秘密鍵の暗号化は非常に重要です。インターネットコマースは、それなしではユビキタスとは言えません。

59
Jeremy

ダイクストラのアルゴリズム

このアルゴリズムは、ネットワーク内の2つのノード間の最適ルートを識別するために、世界中のすべてのrouterに存在します。

37
Amir Rezaei

高速フーリエ変換(FFT)

FFTは、サンプリングされた信号から有用な情報を抽出する非常に重要で広く使用されている方法です。

高速フーリエ変換(FFT)は、離散フーリエ変換(DFT)とその逆を計算する効率的なアルゴリズムです。

30
Amir Rezaei

PageRank

PageRankは、Larry Pageにちなんで名付けられたリンク分析アルゴリズムで、Googleインターネット検索エンジンで使用され、ハイパーリンクされた一連の各要素に数値の重み付けを割り当てますセット内の相対的な重要性を「測定」することを目的とした、World Wide Webなどの文書。

26
Amir Rezaei

データ圧縮アルゴリズム

コンピュータサイエンスと情報理論では、データ圧縮またはソースコーディングは、特定のエンコードスキームを使用して、エンコードされていない表現よりも少ないビット(または他の情報伝達単位)を使用して情報をエンコードするプロセスです。

22
Amir Rezaei

Smith-Waterman(およびNeedleman-Wunsch)

これは長すぎるのでコメントしてください。

Smith-Waterman:シーケンスアラインメントアルゴリズム

そのような例の1つは、Smith-WatermanおよびNeedleman-Wunschアルゴリズムとそれらの近似です。それらのすべては基本的に同じことをしています:それらはalign 2つ以上strings(sequences)です。生物学には意義があります。 DNAまたはタンパク質の配列が揃うと、構造的、機能的、進化的に類似した領域が明らかになります。

Smith-Watermanの子孫としてのBLAST

Smith-Watermanに近似するヒューリスティックはBLASTです。大規模なデータベースのシーケンスから生物学的類似性を検索できます。 BLASTの人気は本当に素晴らしいです-それは生物学で最も広く使われているアルゴリズムである可能性が非常に高いです。バイオインフォマティクスとゲノミクスの新しい領域には、BLASTよりも正確なSmith-Waterman/Needleman-Wunschアルゴリズムの新しいより優れた近似があります。

Smith-Watermanの子孫としてのゲノムアセンブリ

BLASTよりも高速なスミス-ウォーターマンとニードルマン-ウンシュのハイスループット近似は、ショットガンシーケンスからゲノムを組み立てるために使用されます-シーケンサーマシンの生成物は、非常に短い(50から100ヌクレオチド)。このアプローチは、ヒトゲノムプロジェクトを完了するために使用されました。最新のシーケンス処理はすべてこの方法で行われます。

スミス・ウォーターマンの拡張であるマルチプル・シーケンス・アラインメント

多数の複数シーケンスアライメントアルゴリズムが存在します。これらは、Smith-Waterman/Needleman-Wunschのマルチシーケンスバージョンに近似しています。複数の配列がグループとして同時に同時に整列されます。これはペアワイズの対応する問題よりもはるかに難しい問題ですが、ソリューションは、関連するシーケンスの生物学的機能、構造、および進化の歴史についての洞察を提供します。

14

サイアムは、以下を20世紀の最も重要なアルゴリズムとして挙げました。

1946:モンテカルロのメトロポリスアルゴリズム。ランダムプロセスを使用することにより、このアルゴリズムは、複雑すぎて正確に解決できない問題への回答につまずく効率的な方法を提供します。

1947:線形計画法のシンプレックス法。計画と意思決定における一般的な問題のエレガントなソリューション。

1950:クリロフ部分空間反復法。科学計算に豊富にある線形方程式を迅速に解くための手法。

1951:マトリックス計算への分解アプローチ。数値線形代数の一連の手法。

1957:Fortran最適化コンパイラ。高レベルのコードを効率的なコンピューター可読コードに変換します。

1959:固有値を計算するためのQRアルゴリズム。 Swiftで実用的なもう1つの重要な行列演算。

1962:ソート用のクイックソートアルゴリズム。大規模なデータベースを効率的に処理するため。

1965:高速フーリエ変換。今日使用されている最もユビキタスなアルゴリズムである可能性が高く、それは波形(サウンドなど)を周期的なコンポーネントに分解します。

1977:整数関係の検出。一見無関係な数のコレクションによって満たされる単純な方程式を見つけるための高速な方法。

1987:高速多重極法。天体力学からタンパク質の折りたたみまでの問題に適用される、n体計算の複雑さを扱う際の画期的な製品。

個人的にはInteger Relation DetectionPageRank に置き換えます。

13
jason

PageRank、それを愛する、またはそれを憎むが、それは毎日世界中でグーグルする何百万もの人々の決定と行動に影響を与えます。

9
Maksee

今日コンピューターで使用されている最も重要なアルゴリズムの上位3つをリストしなければならない場合、次のように言います。

  1. バイナリ検索
  2. クイックソート
  3. ダイクストラのアルゴリズム

Binary Searchアルゴリズムは常にソートされたリスト内のアイテムを絞り込むために使用されます。ほとんどのインデックスルックアップは、これらの線に沿って何かを使用します。このアルゴリズムは、o(log n)時間での順序付きリストの検索を提供します。

Quicksortアルゴリズムは、最終的にO(n log n)の平均ケースとO(n ^ 2)の悪いケースに並べ替えることができました。並べ替えは、コンピューターで最も一般的なデータタスクの1つであり、最も費用のかかるタスクの1つです。平均的なケースの並べ替えを改善することで、効率が大幅に向上しました。

ダイクストラのアルゴリズムは、前述のとおり、グラフ内のポイント間の最短経路を生成します。これは、あらゆる種類のルーティングアプリケーションで広く使用されています。インターネット自体に関して最も広く使用されており、相互接続されたルーターの絡み合ったWebを通る最速のパスが使用されます。

9
Orbling

ベイズの定理

それはおそらく、私の受信トレイで時間を浪費しているスパムの量を管理可能なレベルに保つのに最も貢献しています。

もちろん、私はそれが他の多くの価値のあるアプリケーションで使用されていると思いますが、SPAMキリングが私のお気に入りです。

8
JohnFx

TimSort

これは、現在 PythonJava 7 および Android で使用されているソートアルゴリズムです。

基本的に:

  • O(N log N) worst case (does not degenerate)
  • ほとんどソートされたリストのO(N)(実際にはN-1ソート済みリストに正確に一致)

そして、その美しさは? stableです!したがって、さまざまな基準によるマルチパスソーティングに適しています。

ちなみに、誰かが最適化されたC++実装を手元に持っている場合...

7
Matthieu M.

3Dコンピューターアニメーションの可視性の問題を解決するために使用されたすべてのアルゴリズムは、私にとって重要なようです。

画家のアルゴリズム

優先塗りつぶしとも呼ばれるPainterのアルゴリズムは、3Dコンピュータグラフィックスの可視性の問題に対する最も簡単な解決策の1つです。 3Dシーンを2D平面に投影する場合、どのポリゴンを表示し、どのポリゴンを非表示にするかを決定する必要があります。

Z-バッファリング

コンピュータグラフィックスでは、zバッファリングは3次元(3-D)グラフィックスでの画像深度座標の管理であり、通常はハードウェアで、場合によってはソフトウェアで行われます。これは、レンダリングされたシーンのどの要素を表示し、どの要素を非表示にするかを決定する問題である、可視性の問題に対する1つの解決策です。ペインターのアルゴリズムは別の一般的なソリューションですが、効率はよくありませんが、不透明でないシーン要素も処理できます。 Zバッファリングは、深度バッファリングとも呼ばれます。

隠面の決定

3Dコンピュータグラフィックスでは、隠面決定(隠面削除(HSR)、オクルージョンカリング(OC)、または可視面決定(VSD)とも呼ばれます)は、特定の視点から見えない面および面の一部を決定するために使用されるプロセスです。隠面判定アルゴリズムは、3Dコンピュータグラフィックスの分野で最初の主要な問題の1つであった視認性の問題の解決策です。隠面判定のプロセスは、非表示と呼ばれることもあり、このようなアルゴリズムは、非表示と呼ばれることもあります。 。ラインレンダリングの類似点は隠線の削除です。たとえば、仮想現実で壁をのぞくことができないように、画像を正しくレンダリングするには隠面の決定が必要です。

6
bman

現在の問題を解決するために必要な方。

3
mipadi

Soundex は、音で名前にインデックスを付ける音声アルゴリズムです。

3
sal

ビタビアルゴリズム

元々は畳み込みエラー訂正コードをデコードするために使用されていましたが、現在は音声認識からバイオインフォマティクスまでの幅広いクラスの認識問題を解決するために使用されています。いくつかの通信およびストレージデバイスでそれを見つけることができます。

3

Runge-Kutta数値積分。これがなければ、多くのシミュレーションは不可能です。宇宙計画、原子力、弾道学、スポーツシミュレーション、防弾チョッキ、衝突試験シミュレーション、流体運動シミュレーション、化学的相互作用シミュレーション、耐震性建物などはありません...リストは続きます。

3
ja72

MP

特定のアルゴリズムよりも一般的な用語ですが、この不可逆なオーディオ形式を生成するために連携して動作するさまざまなアルゴリズムとテクニックの集合体としてMP3について言及します。

それは確かに「デジタル時代」において非常に重要でした。

3
Jens Hoffmann

並べ替えアルゴリズム。

2
tia
2
ysolik

挿入ソート

実装が簡単で、小さなリストでは非常に高速で、マージソート/クイックソートの実装で使用してそれらを高速化します。安定しており、ソートされたリストでO(n))で動作します(昇順でソートされた場合)。

1
Oliver Weiler

カルマンフィルター

ナビゲーション、ターゲットトラッキング(レーダー、ソナー、FLIR、レーダーなど、ほとんどすべてのセンサー)で頻繁に使用されます。 1つの教科書は、ディスクドライブコントローラのアプリケーションを示しています。ロボット制御システムは、カルマンフィルターを頻繁に使用します。

1
John R. Strohm

行列計算におけるガウス・ジョーダン

1
xport

Bツリー、B +ツリー、ハッシュインデックス、バイナリツリーインデックスなどのインデックス作成アルゴリズム。大量のデータのインデックスを作成します。

0
xyz

話し言葉と書き言葉

それらは現在、知識をあるものから別のものに移すための最も効率的なアルゴリズムの1つです。言語がなければ、市民社会は存在できず、情報を伝えることもできませんでした。

0
Malfist

heap データ構造とそれに関連するヒープの構築と保守のためのアルゴリズム。

そして、クイックソートに対する敬意を示します。常に選択できるとは限りませんが、これはコンピュータサイエンスの歴史的発展における基本的なアルゴリズムの1つであり、再帰とアルゴリズム分析を理解するための優れた手段です。それは美しいです、そしてもちろん、私はそれが大好きです。

大きなデータセットの処理を分割、征服、並列化する方法としてのMapReduce。

0
Jay Elston