過去数十年間の人類にとって重要なアルゴリズムはどれですか?[閉まっている]


40

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

これは、開発者が知るべき一般的な知識だと思いました。

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


2
(これまでのところ)4人が「本当の質問」ではないと考えているため、閉鎖されています。おそらく、重要なプログラミングアルゴリズムが何であるかを実際に考えていないためでしょう。
デビッドソーンリー

2
トピックから外れているかもしれませんが、それは本当の質問です。
ジェレミー

1
+1良い質問です。cstheory.stackexchange.comでこれを再確認することをお勧めします
Aleksandr Levchuk

1
なぜあなたはあなた自身の質問に答えますか?何回か?

2
間違った回答はありません+回答の数に制限はありません+「回答ごとに1つ」を求める明確なコメント+著者は自分の回答をいくつか投稿します=非建設的な質問の教科書の場合 古いことはわかっていますが、これを閉じてみましょう。
Aaronaught

回答:


59

公開/秘密キーの暗号化は非常に重要です。インターネットコマースは、それなしではどこにでもあるでしょう。


4
+1と回答に追加するには、RSA。
10

暗号化コード(RSAなど)を実用的なソリューションに変換するためのアルゴリズムとベストプラクティスのグループがあります。
ドナルドフェローズ

37

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

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


本気ですか?ほとんどのルーターは、IP番号がそれに属していることを認識してローカルネットワーク上のマシンに転送するか、よりよく知っているルーター(デフォルトルーター)を知っています。この場合、パケットはそのルーターに送られます。大きいルーターは、IPアドレス範囲X1-Y1の場合、パケットはルーターR1に行く必要があることを知っているかもしれません。範囲X2-Y2の場合、パケットはルーターR2に行く必要があります。

2
@ThorbjørnRavn Andersen:しかし、ルーターがその情報を知るには、ある時点で誰かがダイクストラのアルゴリズムを使用しなければならなかったでしょう。はい、個々のパケットを実際にルーティングするためには使用されませんが、大規模ネットワークのルーティングテーブルを決定するために使用されます。+1。
ビリーONeal

@ Billy、Dijkstraアルゴリズムが実際に使用されるのは誰で、どこで正確に期待しますか?

@ThorbjørnRavn Andersen:私の理解では、OSPFで役割を果たしています。これは小規模ネットワークに適したルートを選択するための基盤です。より大きなネットワーク間の接続では、よりポリシーベースのBGPを使用します。BGPがダイクストラのアルゴリズムを使用しているかどうかはわかりません。
ビリーONeal

3
@Billyが、私の異議は「内に存在したEVERYの世界では、ルータ」。それは-私の意見では-明らかに間違っている。

30

高速フーリエ変換(FFT)

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

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


4
かつて、何十年も前にPDP-11の一連のFFT関数を書いていたボスがいました。彼は、Popular Scienceの裏に広告を掲載して、これらの機能を備えたパンチカードのデッキを販売し、かなり深刻な銀行を作りました。信号処理から株式市場の予測に至るまで、彼のコードを使用する人々がいたことは明らかです。
ダン・レイ

26

PageRank

PageRankはリンク分析アルゴリズムで、ラリーペイジにちなんで命名され、Googleインターネット検索エンジンで使用され ます。セット内の重要性。


ハハ、私たちの答えはたった2秒しか離れていません
でした

全く問題無い!:)
アミールレザエイ

36
ラリーペイジにちなんで名付けられたことに私は気づかなかった。私はいつも名前がWebページと関係があると思いました。
JohnFx

1
@JohnFxおっと、冗談じゃない!
マークC

+1:しかし、実際のアルゴリズムが人類に知られていなければ資格がありますか?(IIRCウィキペディアは概算です)
スティーブンエバーズ

22

データ圧縮アルゴリズム

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


2
まさに、基本的な圧縮アルゴリズムLZWは、ソフトウェアエンジニアリングで最も美しいアルゴリズムの1つと考えることができると思います。
mojuba

「可能であればギブ特定のアルゴリズムの名前」

14

スミス-ウォーターマン(およびニードルマン-ウンシュ)

これは取得しすぎる可能性があるため、コメントしてください。

Smith-Waterman:配列アラインメントアルゴリズム

そのような例の1つは、Smith-WatermanおよびNeedleman-Wunschアルゴリズムとその近似であると思います。それらはすべて本質的に同じことを行っています。2つ以上の文字列(シーケンス)整列します。生物学には重要な意味があります。DNAまたはタンパク質配列が整列すると、構造的、機能的、進化的類似性の領域が明らかになります。

スミス-ウォーターマンの子孫としてのBLAST

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

スミス・ウォーターマンの子孫としてのゲノムアセンブリ

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

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

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


こんにちは、プログラマーへようこそ!投票と並べ替えを容易にするために、このようなリスト質問の慣習に従って、ここで提示しているアルゴリズムごとにこの回答を1つに分割することをお勧めします。
李江

@Yi Jiang:私のパンテオン!あなたのコメントを「嘔吐を促進する」と誤解しています。:-/
ハンニバルレクター博士

ここでは、1つのアルゴリズムだけを主張します-スミス-ウォーターマン(およびその変形ニードルマン
ブンシュ

13

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

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

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

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

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

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

1959:固有値を計算するためのQRアルゴリズム。もう1つの重要な行列演算により、迅速かつ実用的になりました。

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

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

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

1987:高速多重極法。天体力学からタンパク質の折り畳みに至るまでの問題に適用される、n体計算の複雑さへの対処におけるブレークスルー。

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


1
このリストには、私は、彼らがより多くの20世紀の「最も重要な定理」についてであったが、2冊の本を追加したい:ファイブ黄金ルールamazon.com/Five-Golden-Rules-20th-Century-Mathematics/dp/...、および5つのゴールデンルール。amazon.com/Five-More-Golden-Rules-20th-Century/dp/0471395285
タングレナ

モンテカルロ法は、元の形で多かれ少なかれ使用されています。これは、FFTおよびクイックソートにも当てはまります。残りのほとんどは、私は単に慣れていません。LPのシンプレックス法は、最新の方法と比較して、まったくうまくスケールしません。
デビッドソーンリー

9

PageRank、それを好きか嫌いかは違いますが、世界中の何百万人もの人々がグーグルで日々の決定や行動に影響を与えています。


9

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

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

バイナリサーチアルゴリズムはソートされたリスト内の項目を絞り込むことが常に使用され、ほとんどのインデックス検索は、いくつかの点で、これらの線に沿って何かを使用します。このアルゴリズムは、o(log n)時間で順序付きリストの検索を提供します。

クイックソートアルゴリズムは最終的にソートダウンO(N Nログ)平均的なケースとはO(n ^ 2)最悪の場合に得ることができました。並べ替えは、コンピューターで最も一般的なデータタスクの1つであり、最も高価なものの1つであり、平均的なケースの並べ替えを改善することは、効率性の大きな前進でした。

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


バイナリ検索は、非常に古いものでなければなりません...つまり、「過去」に定式化され、「10年」でしたが、何百年も続いていたでしょう。
カークブロードハースト

@Kirk Broadhurst:それでも、それはコンピューターにとって非常に重要なアルゴリズムです。人間がいつそれを最初に思いついたかに関係なく。
11

8

ベイズの定理

おそらく、受信ボックス内の時間の無駄なスパムの量を管理可能なレベルに保つことに最も貢献しているでしょう。

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


私はあなたに親指をあきらめますが、これは定理(最高の1つ)であり、アルゴリズムではありません。ただし、多くのアルゴリズムはこの定理に基づいています。
アミールRezaei

私はそれらをすべてアルゴリズムの一般的なカテゴリにまとめようとしましたが、技術的にはあなたは正しいです。
-JohnFx

@AmirR技術的に正しい、最高の種類の正しい!
マークC

7

ティムソート

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

基本的に:

  • O(N log N)最悪の場合(縮退しません)
  • ほとんどソートされたリストのO(N)(実際N-1には、すでにソートされたリストに正確に)

そしてその美しさは?それはです安定しました!したがって、さまざまな基準に従ってマルチパスソートに適しています。

ところで、誰かが最適化されたC ++実装を手にしているなら...


Θ(NlogN)にすることはできません。既にソートされたリストでより優れた動作をするためです。ここではO(NlogN)が正しい表記です。
ドナルドフェローズ

これは素晴らしいですが、「過去数十年で発明された最も優れたアルゴリズムの1つ」とは決して言えません。ティムソートのベースとなっているマージソートは、真の成果です。
ビリーONeal

6

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

画家のアルゴリズム

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

Zバッファリング

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

隠面判定

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


3

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


1
それは私が言っていたものです。今、私はそれを言う必要はありません。
ロバートハーベイ

どちらも良い答えではありません。人間にとって重要ではないアルゴリズム。
アミールレザエイ

6
これは特定のアルゴリズムではなく、たとえ人類にとっては重要ではない可能性があります。
ジェイソン

3

Soundexは、名前を音声で索引付けするための音声アルゴリズムです。


soundexは人類にどのように貢献しましたか?
バルジャック

自然言語を使用する機能が改善され、スペルと地域の発音のわずかな違いが修正されました。
sal

3

ビタビアルゴリズム

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


+1ビタビアルゴリズムは非常に重要です。@ [Giacomo Verticale]は、おそらく隠れマルコフモデル(HMM)との関係に言及する必要があります。
アレクサンドルレフチュク

3

MP3

特定のアルゴリズムよりも一般的な用語ですが、この損失の多いオーディオ形式を生成するために協力して機能するさまざまなアルゴリズムと手法の集合体としてMP3を言及します。

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


3

Runge-Kutta数値積分。それなしでは、多くのシミュレーションは不可能です。宇宙プログラム、原子力、弾道、スポーツシミュレーション、防弾チョッキ、衝突テストシミュレーション、流体運動シミュレーション、化学相互作用シミュレーション、耐震建物はありません...リストは続きます。


+1 @ j172これは知っています。数値解析とシミュレーションに本当に役立ちます。
アミールレザエイ

2

ソートアルゴリズム。


5
これは...しかし、特定のアルゴリズムではありません
ジャスティン・L.

ええ、ジャスティンL.が言ったことは、どのソートアルゴリズムですか?
ハンニバルレクター博士

「特定のアルゴリズム」は、n lg nソートの最初のマージソートでなければなりません。
ビリーONeal

2
@dr Hannibal Lecter:もちろんバブルソート。他のすべては時期尚早な最適化です。
ピーターヘン

2

1
うん!私は確かに、人々が実動コードでクイックソートを使用していないことを願っています。さらに重要なことに、mergesortは以前に登場し、ほぼ同じ速度です。(うまくいけば、ほとんどのコードは
Introsortで

2
@Billy ONeal、.NETでのソートはすべてクイックソートです。そのため、List <T> .Sort()を呼び出すプログラムは、実稼働環境でクイックソートを使用します。
スティーブンエバーズ

@SnOrfus:その声明の証拠はありますか?私の理解では、List <t> .Sortはintrosortに基づいています。
ビリーONeal

3
@Billy ONeal:ストレートMSDNから- msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
ysolik

3
@Thorbjørn:それはまだ良い汎用アルゴリズムではありません。Introsort クイックソートですが、特定の再帰の深さを超えるとヒープソートに切り替わります。これにより、クイックソートの優れた特性を得ることができますが、アルゴリズムが不適切なピボットを選択した場合でも、常に病理学的なケースを回避できます。
ビリーONeal

1

挿入ソート

実装が簡単で、小さなリストで非常に高速であり、Merge Sort / Quicksortの実装で使用してリストを高速化します。安定しており、ソートされたリストでO(n)で動作します(昇順でソートされた場合)。



1

カルマンフィルター

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


0

話し言葉と書き言葉。

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


5
-1:アルゴリズムは自然言語を使用して表現できますが、自然言語はアルゴリズムではありません。
スティーブンエバーズ

2
では、圧縮アルゴリズムはアルゴリズムではないと思いますか?すべての言語は、ソースから受容者に伝達される情報を圧縮します。他のアルゴリズムと同様に従わなければならない特定のルール(文法)があり、入力(経験)を受け取り、異なる出力(知識)を生成します。言語をアルゴリズムとみなすことができなかった方法を確認できません。
マルフィスト

多くの面でアルゴリズムのすべての標準定義に失敗します。
ジェームズ・レインステートモニカポーク

0

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

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


0

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



-1

ブルートフォースアルゴリズム!

多くの人がこのブルートフォースアルゴリズムを過小評価しています。実際には、パターンのない問題を解決するために主に使用されます。大好き!


5
それはアルゴリズムではありません。それは一種のアルゴリズムです。
アダムリア

暗号化を破る方法です。
アミールRezaei

それもアルゴリズムに分類されると思います。「xからyに何かをしてください。」<---アルゴリズムは正しい?
xport

アルゴリズムは、特定のタスクを達成するための一連のステップです。それは特定ではありません。
アント

-5

バブルソート !

バブルソートはBogosortほど悪くはありません。それが私がバブルソートに投票する理由です。


1
アルゴリズムが重要かつ重要である理由を述べることを検討してください。人々は、バブルソートが重要かつ重要である理由について意見が分かれているようです。
タマラWijsman

5
バラクオバマでさえ、バブルソートが間違った道であることを知っている。
ジョーイアダムス

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