別の既知のアルゴリズムよりも時間の複雑さが悪いが、すべての実際の状況でより良い選択である広く使用されているアルゴリズムはありますか (複雑さは劣りますが、それ以外の場合は優れています)?
受け入れられる答えは、次のような形式です。
それに応じてと時間の複雑さを持つアルゴリズムがありますが
A
、定数が非常に大きいため、宇宙内の原子の数よりも少ない入力に対しては 利点がありません。B
O(N**2)
O(N)
B
A
回答のハイライトの例:
シンプレックス アルゴリズム -- 最悪の場合は指数時間 --対凸最適化問題の既知の多項式時間アルゴリズム。
中央値アルゴリズムの単純な中央値 -- 最悪の場合の O(N**2)対既知の O(N) アルゴリズム。
バックトラッキング正規表現エンジン -- 最悪の場合の指数対O(N) Thompson NFA ベースのエンジン。
これらの例はすべて、最悪のシナリオと平均的なシナリオを比較したものです。
最悪のケースと平均的なケースのシナリオの違いに依存しない例はありますか?
関連している:
「悪いほうがいい」の台頭。(この質問の目的のために、「Worse is Better」というフレーズは、記事よりも狭い(つまり、アルゴリズムの時間の複雑さ) 意味で使用されています)
-
ABC グループは完璧を目指して努力しました。たとえば、漸近的に大きなコレクションに最適であることが証明されたツリーベースのデータ構造アルゴリズムを使用しました (ただし、小さなコレクションにはあまり適していませんでした)。
この例は、これらの大規模なコレクションを格納できるコンピューターがない場合の答えです (つまり、この場合、大規模では十分な大きさではありません)。
正方行列乗算のCoppersmith–Winograd アルゴリズムは良い例です (これは最速 (2008 年) ですが、悪いアルゴリズムより劣っています)。他のもの? ウィキペディアの記事から: 「現在のハードウェアでは処理できないほど大きな行列に対してのみ利点があるため (Robinson 2005)、実際には使用されていません。」