過去数十年で人類に最も貢献した最も重要なアルゴリズムはどれですか?
これは、開発者が知るべき一般的な知識だと思いました。
更新:
可能であれば、特定のプログラミングアルゴリズムに対する回答を保管してください。
最も重要なもののリストを取得したいのですが、回答ごとにアルゴリズムが1つだけです。
アルゴリズムが重要かつ重要である理由を述べることを考慮してください...
過去数十年で人類に最も貢献した最も重要なアルゴリズムはどれですか?
これは、開発者が知るべき一般的な知識だと思いました。
更新:
可能であれば、特定のプログラミングアルゴリズムに対する回答を保管してください。
最も重要なもののリストを取得したいのですが、回答ごとにアルゴリズムが1つだけです。
アルゴリズムが重要かつ重要である理由を述べることを考慮してください...
回答:
このアルゴリズムは、ネットワーク内の2つのノード間の最適なルートを識別するために、世界中のすべてのルーターに存在します。
FFTは、サンプリングされた信号から有用な情報を抽出する非常に重要で広く使用されている方法です。
高速フーリエ変換(FFT)は、離散フーリエ変換(DFT)とその逆を計算する効率的なアルゴリズムです。
PageRankはリンク分析アルゴリズムで、ラリーペイジにちなんで命名され、Googleインターネット検索エンジンで使用され ます。セット内の重要性。
コンピューターサイエンスと情報理論では、データ圧縮またはソースコーディングは、特定のエンコードスキームを使用して、エンコードされていない表現が使用するよりも少ないビット(または他の情報伝達単位)を使用して情報をエンコードするプロセスです。
これは取得しすぎる可能性があるため、コメントしてください。
そのような例の1つは、Smith-WatermanおよびNeedleman-Wunschアルゴリズムとその近似であると思います。それらはすべて本質的に同じことを行っています。2つ以上の文字列(シーケンス)を整列します。生物学には重要な意味があります。DNAまたはタンパク質配列が整列すると、構造的、機能的、進化的類似性の領域が明らかになります。
Smith-Watermanに近いヒューリスティックはBLASTです。生物学的類似性のために大規模なデータベースのシーケンスを検索できます。BLASTの人気は非常に高く、生物学で最も広く使用されているアルゴリズムである可能性が非常に高いです。バイオインフォマティクスとゲノミクスの新しい領域には、BLASTよりも正確なSmith-Waterman / Needleman-Wunschアルゴリズムのより新しい近似があります。
BLASTよりも高速なSmith-WatermanおよびNeedleman-Wunschの高スループット近似は、ショットガンシーケンスからゲノムを組み立てるために使用されます-シーケンサーマシンの生成物は非常に短い(50〜100ヌクレオチド)。このアプローチは、ヒトゲノムプロジェクトを完了するために使用されました。最新のシーケンスはすべてこの方法で行われます。
多数のマルチシーケンスアラインメントアルゴリズムが存在します-それらは、Smith-Waterman / Needleman-Wunschのマルチシーケンスバージョンに近似しています。複数のシーケンスは、グループとして互いに同時に整列されます。それはペアワイズの対応物よりもはるかに難しい問題ですが、解決策は関連するシーケンスの生物学的機能、構造、および進化の歴史についてのより多くの洞察を提供します。
サイアムは、20世紀の最も重要なアルゴリズムとして以下を挙げました。
1946:モンテカルロのメトロポリスアルゴリズム。ランダムなプロセスを使用することにより、このアルゴリズムは、複雑すぎて正確に解決できない問題への答えを見つけるための効率的な方法を提供します。
1947:線形計画法のシンプレックス法。計画および意思決定の一般的な問題に対するエレガントなソリューション。
1950:クリロフ部分空間反復法。科学計算に豊富な線形方程式を迅速に解く手法。
1951:マトリックス計算への分解アプローチ。数値線形代数のための一連の手法。
1957:Fortran最適化コンパイラー。高レベルのコードを効率的なコンピューター読み取り可能なコードに変換します。
1959:固有値を計算するためのQRアルゴリズム。もう1つの重要な行列演算により、迅速かつ実用的になりました。
1962:ソート用クイックソートアルゴリズム。大規模データベースの効率的な処理のため。
1965:高速フーリエ変換。おそらく今日使用されている最もユビキタスなアルゴリズムは、波形(音など)を周期的なコンポーネントに分解します。
1977:整数関係検出。一見無関係な数のコレクションで満たされる単純な方程式を見つけるための高速な方法。
1987:高速多重極法。天体力学からタンパク質の折り畳みに至るまでの問題に適用される、n体計算の複雑さへの対処におけるブレークスルー。
個人的には、Integer Relation DetectionをPageRankに置き換えます。
今日コンピューターで使用されている上位3つの最も重要なアルゴリズムをリストしなければならないとしたら、次のように言います。
バイナリサーチアルゴリズムはソートされたリスト内の項目を絞り込むことが常に使用され、ほとんどのインデックス検索は、いくつかの点で、これらの線に沿って何かを使用します。このアルゴリズムは、o(log n)時間で順序付きリストの検索を提供します。
クイックソートアルゴリズムは最終的にソートダウンO(N Nログ)平均的なケースとはO(n ^ 2)最悪の場合に得ることができました。並べ替えは、コンピューターで最も一般的なデータタスクの1つであり、最も高価なものの1つであり、平均的なケースの並べ替えを改善することは、効率性の大きな前進でした。
前述のダイクストラのアルゴリズムは、グラフ内のポイント間の最短パスを生成します。これはあらゆる種類のルーティングアプリケーションで広く使用されており、相互接続されたルーターのもつれたウェブを通る最速のパスが使用されるように、インターネット自体に関して最も広く使用されています。
おそらく、受信ボックス内の時間の無駄なスパムの量を管理可能なレベルに保つことに最も貢献しているでしょう。
もちろん、私はそれが他の多くの価値のあるアプリケーションで使用されていますが、SPAM-killingは私のお気に入りです。
これは、Python、Java 7、およびAndroidで現在使用されているソートアルゴリズムです。
基本的に:
N-1
には、すでにソートされたリストに正確に)そしてその美しさは?それはです安定しました!したがって、さまざまな基準に従ってマルチパスソートに適しています。
ところで、誰かが最適化されたC ++実装を手にしているなら...
3Dコンピューターアニメーションの可視性の問題を解決するために使用したすべてのアルゴリズムは、私にとって非常に重要なようです。
優先塗りつぶしとも呼ばれる画家のアルゴリズムは、3Dコンピューターグラフィックスの可視性の問題に対する最も簡単な解決策の1つです。3Dシーンを2D平面に投影する場合、ある時点で、どのポリゴンを表示し、どのポリゴンを非表示にするかを決定する必要があります。
コンピューターグラフィックスでは、zバッファリングは、通常はハードウェアで、場合によってはソフトウェアで行われる、3次元(3-D)グラフィックスの画像深度座標の管理です。これは、可視性の問題に対する1つのソリューションです。可視性の問題は、レンダリングされたシーンのどの要素を表示し、どの要素を非表示にするかを決定する問題です。ペインターのアルゴリズムは、効率は劣りますが、不透明ではないシーン要素も処理できる別の一般的なソリューションです。Zバッファリングは、深度バッファリングとも呼ばれます。
3Dコンピュータグラフィックスでは、隠面判定(隠面消去(HSR)、隠蔽カリング(OC)、または可視面判定(VSD)とも呼ばれます)は、特定の視点からどの面と部分が見えないかを判断するプロセスです隠面判定アルゴリズムは、3Dコンピュータグラフィックスの分野で最初の主要な問題の1つであった可視性の問題の解決策です。隠面判定のプロセスは、非表示と呼ばれることもあります。ラインレンダリングの類似点は隠線除去であり、仮想現実の壁を覗くことができないように、イメージを正しくレンダリングするには隠面の決定が必要です。
もともとは畳み込み誤り訂正コードのデコードに使用されていましたが、現在では幅広い種類の認識問題(音声認識からバイオインフォマティクスまで)の解決に使用されています。いくつかの通信およびストレージデバイスで見つけることができます。
Runge-Kutta数値積分。それなしでは、多くのシミュレーションは不可能です。宇宙プログラム、原子力、弾道、スポーツシミュレーション、防弾チョッキ、衝突テストシミュレーション、流体運動シミュレーション、化学相互作用シミュレーション、耐震建物はありません...リストは続きます。
ナビゲーション、ターゲットトラッキング(レーダー、ソナー、FLIR、レーダーなどのほとんどすべてのセンサー)で頻繁に使用されます。1つの教科書には、ディスクドライブコントローラーのアプリケーションが示されています。ロボット制御システムは、カルマンフィルターを頻繁に使用します。
話し言葉と書き言葉。
それらは現在、知識をあるものから別のものに移すための最も効率的なアルゴリズムの1つです。言語がなければ、市民社会は存在できず、情報を伝達できませんでした。
ヒープの構築と保守のためのヒープデータ構造とそれに関連するアルゴリズム。
また、クイックソートに敬意を示します。それが常に選択の種類であるとは限りませんが、コンピューターサイエンスの歴史的発展における基本的なアルゴリズムの1つであり、再帰とアルゴリズム分析を理解するための優れた手段です。それは美しいです、そして、はい、私はそれが大好きです。
バブルソート !
バブルソートはBogosortほど悪くはありません。それが私がバブルソートに投票する理由です。