データ構造、アルゴリズム、トレードオフの作業タイトルが付けられた、ある時点で執筆を待っている教科書があります。学部レベルで学習する可能性のあるほぼすべてのアルゴリズムまたはデータ構造には、一部のアプリケーションで他のアプリケーションよりも優れた機能があります。
誰もが標準のソートアルゴリズムに精通しているため、ソートを例に取りましょう。
まず、複雑さだけが問題ではありません。実際には、一定の要因が重要です。そのため、クイックソートは最悪の場合の複雑さにもかかわらず、ヒープソートよりもクイックソートを使用する傾向があります。
第二に、奇妙な制約の下でプログラミングをしている状況にいる可能性が常にあります。私はかつて、適度なサイズ(1000程度)のサンプルのコレクションから可能な限り高速でクォンタイル抽出を行う必要がありましたが、予備の読み書きメモリがほとんどない小さなマイクロコントローラーであったため、ほとんどのアルゴリズムをソートします。シェルの並べ替えは、2次関数であり、追加のメモリを必要としないため、最良のトレードオフでした。O(nlogn)
その他の場合、アルゴリズムまたはデータ構造からのアイデアは、特殊な目的の問題に適用できる場合があります。バブルの並べ替えは、実際のハードウェアでの挿入の並べ替えよりも常に遅いように見えますが、バブルパスを実行するというアイデアは、まさに必要なものです。
たとえば、現代のビデオカードでの3D視覚化やビデオゲームのようなものを考えてみます。パフォーマンス上の理由から、カメラに最も近いものからカメラから最も遠いものまで順番にオブジェクトを描画しますが、正確な順序がわからない場合は、ハードウェアが処理します。3D環境を移動する場合、オブジェクトの相対的な順序はフレーム間であまり変化しないため、フレームごとに1つのバブルパスを実行するのが妥当なトレードオフになる可能性があります。(ValveのSourceエンジンは、パーティクル効果のためにこれを行います。)
永続性、同時実行性、キャッシュの局所性、クラスター/クラウドへの拡張性、および気になる操作の計算の複雑さが同じであっても、あるデータ構造またはアルゴリズムが別のデータ構造またはアルゴリズムより適切である可能性のある他の多くの理由があります。
そうは言っても、万が一に備えてたくさんのアルゴリズムとデータ構造を覚えておく必要があるわけではありません。戦いの大部分は、そもそも悪用されるトレードオフがあることを認識しており、適切な何かがあると思われる場合にどこを調べるべきかを知っています。