[解決済み] なぜクイックソートはマージソートより優れているのですか?
2022-03-26 10:15:20
質問
面接でこんな質問をされました。どちらもO(nlogn)ですが、ほとんどの人はMergesortではなくQuicksortを使っています。なぜでしょうか?
どのように解決するのですか?
クイックソートはO( n 2 ) の最悪ランタイムと O( n ログ n )の平均実行時間です。しかし、多くのシナリオでマージソートより優れています。なぜなら、アルゴリズムの実行時間には多くの要因が影響し、それらをすべて考慮すると、クイックソートは勝っているからです。
特に、よく言われるソートアルゴリズムの実行時間とは、データをソートするために必要な比較回数やスワップ回数のことである。これは、特に基盤となるハードウェア設計に依存しないため、確かに性能の良い指標となる。しかし、現在のハードウェアでは、参照の局所性(つまり、キャッシュにあるであろう要素をたくさん読み込むかどうか)など、他のものも重要な役割を担っている。特にクイックソートは追加スペースをほとんど必要とせず、良好なキャッシュの局所性を示すので、多くの場合マージソートよりも高速になります。
さらに、クイックソートの最悪実行時間であるO( n 2 )は、ピボットの適切な選択(ランダムに選ぶなど)により、ほぼ完全に解決されます(これは優れた戦略です)。
実際には、最近のクイックソートの実装の多く (特に libstdc++ の
std::sort
) は、実際には
イントロソート
であり、その理論的な最悪のケースは O(
n
ログ
n
)、マージソートと同じです。これは、再帰の深さを制限し、別のアルゴリズムに切り替えることで実現されます (
ヒープソート
を超えると
n
.
関連
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] 引数とパラメータの違いは何ですか?
-
[解決済み] 円周率の計算が正確かどうかを判断するにはどうしたらよいですか?
-
[解決済み] 償却期間一定
-
[解決済み] 深さ優先探索(DFS)と幅優先探索(BFS)の使い分けはいつが実用的か?[クローズド]
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】10億個の数字の配列から最大100個の数字を求めるプログラムを作成せよ
-
[解決済み】広さ優先と深さ優先の比較
-
[解決済み] 光の周波数をRGBに変換する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] マージソートの時間および空間の複雑さ
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] 2つの緯度経度点間の距離を計算する?(ハバーシンの公式)
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] コンピュータサイエンスにおけるNP完全とは何ですか?
-
[解決済み] なぜクイックソートはマージソートより優れているのですか?
-
[解決済み] ディズニーのファストパスは有効か、有用か 待ち行列論
-
[解決済み] 2つの矩形の交差を検出するアルゴリズム?
-
[解決済み] ある数字が回文であるかどうかを調べるには?
-
[解決済み] クイックソートとマージソートの比較 [重複]。