実際に最も頻繁に使用されるアルゴリズムはどれですか?


19

どのアルゴリズムが最も頻繁に使用されますか?

回答ごとに1つのアルゴリズムを記述し、回答を短くしてください(1行または2行)。


Kaveh、多分あなたは非常に多くを供給する前に応答を待つべきですか :)
Suresh Venkat

1
@シュリーシュ:ごめんなさい。:)
カベ

3
ほとんどの場合、どのような意味ですか?(アルゴリズムを実装するさまざまなコンピュータープログラムの数?アルゴリズムを使用するインストール済みソフトウェアの数?アルゴリズムの実行数?アルゴリズムを使用して処理されるデータの量?アルゴリズムが使用するCPU秒?)どこ?(アカデミア、産業、家庭用PC?)このようなものを見積もることは可能ですか?答えを裏付けるデータはありますか?
ユッカスオメラ

1
Jukka Suomelaが指摘したように、質問は曖昧すぎます。これ以上の説明がなければ、答えはアルゴリズムに関する教科書の目次よりも良くなることはありません。
伊藤剛

1
John MacCormickによる「未来を変えた9つのアルゴリズム:今日のコンピューターを動かす独創的なアイデア」という本があります。参照してくださいpress.princeton.edu/titles/9528.html
アレッサンドロJacopson

回答:


18

アルゴリズムの問​​題である高速フーリエ変換は、実際のコンピューターシステムによって1日にほとんど解決されますか?近くにいなければなりません。だから私はCooley-Tukey FFTアルゴリズムを推薦したいと思います


私はこれが好きです、FFTは基本的なコンピュータサイエンス教育では見落とされていますが、確かに私たちの現代社会に多大な影響を与えるアルゴリズムであり、私たちの周りの多くの現代のものは常にFFTを処理しています。
ユッカスオメラ

14

乗算。

おそらく、最も古くて自明ではないアルゴリズムの1つであり、FFTよりも頻繁に解決される問題です。


乗算はアルゴリズムではなく、さまざまなアルゴリズムによって解決される多くの副問題の問題です。固定サイズの整数と浮動小数点、ハードウェアまたはソフトウェアによって実行されます。可変サイズのbignums(モジュロかない)、行列、...
ジル「SO-停止されて悪」

私は最近のCPUのハードウェア乗算回路について言及していました(整数と浮動小数点数の場合、これら2つは最終的にそれほど違いはありません)。私の理解では、それらは同じ基本的なアプローチの「ちょうど」非常に巧妙に設計されたバージョンである傾向があるということです-中世ですでに知られている「長い乗算」アルゴリズム。
ユッカスオメラ

減算(比較)は乗算よりも頻繁に使用されると思います。また、乗算がアルゴリズムとしてカウントされ、加算/減算がカウントされない理由はわかりません。しかし、これが答えになるかどうかはわかりません。
伊藤剛

はい、加算と減算は乗算よりも頻繁に使用されます。実際、長い乗算アルゴリズムは基本的に乗算を加算に減らします。しかし、ここで指名できる単一の加算/減算アルゴリズムがあるかどうかはわかりませんか?
ユッカスオメラ

@JukkaSuomela:2の補数の加算と減算は良い候補です。
ジョンギーツェン

13

ダイクストラベルマン・フォードの最短経路アルゴリズム。ある少なくとも各ASは、リンクステートルーティングプロトコル(ダイクストラ)または距離ベクトルルーティングプロトコル(ベルマン・フォード)のいずれかを実行している2010年のように35,000自律システムは、活性は、インターネット上で(AS)。通常、1つのAS内のルーターは、数分ごとに定期的にテーブルを更新します(10など)。

したがって、1日あたりのダイクストラ&ベルマンフォードの処刑数は少なくとも500万回になります。そして、それはルーターからのみです。

Googleマップからの最短パスの計算や、10倍の数を簡単に計算できる同類の計算は行っていません。1日5億回の実行は、それほど大きなものではありません。


1日に5億件の処刑が行われているように思えるかもしれませんが、この地球上には、たとえば数十億の携帯電話があることに留意してください。それらのことはいつも何をしているのですか?または、各通話中に彼らは何をしていますか?わかりませんが、少なくとも最短経路よりも多くのFFTを実行していると思います。
ユッカスオメラ

8

14
ところで、実際には、クイックソートが実際の世界で最も一般的に使用されるソートアルゴリズムであるということですか?私は、いくつかの一般的に使用されるプログラミング言語での汎用「ソート」機能の実装を簡単に見ました。Perl:最近、クイックソートからマージソートに切り替えたようです。Python:Timsort(mergesort / insertion sort hybrid)を使用します。Java:以前はマージソートでしたが、現在はティムソートです。データベースは外部ソートを使用する傾向があります。クイックソートはすでに絶滅危species種ですか?
ユッカスオメラ

それは非常に良い点だと思います。誰かが答えを編集できるといいですね。
フアンベルメホベガ

@ Juan、Jukkaが述べた点は正しいが、答えを編集する理由は見当たらない。
カヴェー


7

最もよく使用されるアルゴリズムは、パリティチェック(またはCRCまたは何らかのエラー修正コード)であると思います。これらはすべてのRAMアクセスに現れるからです。


少なくとも任意のIPベースのネットワークを介して送信されるパケットごとに一度も使用
クラウスブロッホ



4

有限オートマトンへの変換による正規表現マッチング-これらの線に沿ってgrep関数を信じています。



3

TCPの現代的な実装のアルゴリズムよりも広く使用されているアルゴリズムを考えるのは困難です。つまり、輻輳回避高速再送信です。それは、アルゴリズムの基準を満たすものをどのように決定するかに依存しますが...


しかし、実際にFFTよりも頻繁にTCPアルゴリズムを使用できますか?コンピューターが単一のIPパケット(TCPまたは非TCP)を送信する場合、通常は多数のFFT計算がトリガーされませんか?通常、パケットは、WLAN、ADSL、GSMなどのテクノロジーを使用して、ある時点で送信されます。ほとんどのパケットは、FFTに大きく依存する変調を使用していると思います。
ユッカスオメラ

あなたは正しいと思います。
レフレイジン


2

SHA-1(および一般的なハッシュ関数)。おそらく実行回数の点で他のほとんどのアルゴリズムに勝っています。


2

B +ツリー関連のアルゴリズムは、データベースに使用されます


2

スケジューリングアルゴリズム。これらは世界中のすべてのユーザーデバイスとサーバーで使用されています。多くのバリエーションが使用されていますが、「マルチレベルフィードバックキュー」に関する多くのリファレンスが見つかりました。


1

この応答は、実際のCPUサイクルの観点から「最も頻繁に」解釈します。

70年代にコンピューティングを学んでいたとき、コンピューター(読み取り:メインフレーム)サイクルの大部分がソートに費やされていたことを読んだことを思い出します。ビジネスアプリケーションでは、分析とレポートのために広範なソートが必要です。それが大きく変わったとは思いませんが、もちろん、他のアプリ(電子メール、ワードプロセッシングなど)の台頭がミックスを変えたに違いありません。これらのソートは、サブソートを作成するために連続したフィールドでソートする必要があるため、通常はクイックソートではなく安定したソートです。

厳密に言えば、最も頻繁に使用されるアルゴリズムは、疑いもなく、他に何も行われていないときにWindowsシステムの待機プロセスによって実行されるものです;-)。


1

スプレース行列ベクトル乗算

...は、ほぼすべての線形システムのソリューションの背後にある計算上の主力製品です。その結果、いつでも実行されています

  • 科学者/エンジニアが微分方程式を解く
  • 統計学者は新しい相関(PCA)を見つける
  • Googleがpagerankを実行
  • お使いの携帯電話は、GPS、加速度計、セルタワーの位置から位置を予測します
  • 車がサスペンションを調整します
  • 等....

スーパーコンピューターまたはクラスター上のFLOPのほとんどは、まばらなmat-vec内で使用されます。


1

ニュートンの方法。平方根の計算、除算の計算に使用されます。線形プログラミングを行うために使用できます。より一般的には、(凸)最適化の主力です。これは、アクション/エネルギーを最小化することにより、物理学の微分方程式を解くために使用できます。


1

ハッシュと赤黒の木。

それらはすでにSTL(hash_map、map)に実装されており、すべてのプログラマーは、任意のデータ型でインデックス付けされた情報を保存したいときはいつでも、そのようなコンテナーが非常に便利であることを知っています。



0

動的プログラミング

DPは、これまでの調査で引用された他のアルゴリズムよりも「頻繁に」使用されていると思います。アルゴリズムの特定の実装が呼び出される回数ではなく、実際にプログラマが重要なアルゴリズムの概念を実装する頻度という意味で「より頻繁に」推測します。

DPは用途が広く、多くの顔を持っています。時々無意識のうちにそれを使用し、後で私がDPをしていることに気付きました。

もちろん、Dynamic Programよりも一般的なものもありますが、ほとんどはデータ構造(配列、リンクリスト、ハッシュ)です。


7
これは、単一のアルゴリズムではなく、アルゴリズム設計のパラダイム(貪欲またはプライマルデュアルに類似)であるため、他の提案とは少し異なります。
ユッカスオメラ

0

文字列照合。アプリケーションソフトウェアおよびデータベースレベルで常に使用されています。

正確な場合、いくつかの非常に複雑なアルゴリズム(KMP、ボイヤームーア)があり、一部は準線形の予想ランタイムを実現します。また、CSの観点から学ぶことも興味深いです。

おおよその文字列一致、つまり位置合わせは、おそらくさらに興味深いものです。「自動修正」機能を知っていますか?また、ノイズを含む文字列データ(DNAなど)の検索は、アライメントを使用して行われます。

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