Randomized Quicksortの利点は何ですか?


18

本のRandomized Algorithmsで MotwaniとRaghavanは、RandQS関数(ランダム化クイックソート)の説明で導入部を開きます。ここでは、セットを2つの部分に分割するために使用されるピボットがランダムに選択されます。

私はこれまでに(明らかにやや劣っています)頭を悩ませてきましたが、このアルゴリズムが単に毎回(サイズではなくインデックス内の)要素を選択することに比べて、どのような利点があるのか​​わかりませんでした。

私が見ることができないのはこれだと思います:初期セットがランダムな順序である場合、セット内のランダムな場所で要素を選択することと固定位置で要素を選択することの違いは何ですか?

誰かがかなり単純な言葉で私を啓発できますか?

回答:


19

入力配列がランダムに均一に分布している場合(前述のように)、常に固定位置(たとえば、提案されている中央の要素)で要素を選択することと、ランダムに選択された要素を選択することに違いはありません。

ただし、入力配列が実際にランダムな順序でない場合(ほとんどすべての実際のシナリオでそうなることがあります)、配列内の要素をランダムな順序で配置するために配列を「事前調整」するか、(同様に)常にランダムな要素をピボットとして使用します。これにより、クイックソートのパーティションフェーズでは、アレイがほぼ等しいサイズのサブアレイに分割されるため、予想される実行時間はままになりO(nlogn)

そのため、混乱は、何らかの方法でソートアルゴリズムが(実際には)入力配列が常にランダムに分散されることを期待できるという事実から生じているように見えます。


7
ランダム化(代わりに最悪のケースを取得するため)の理論的な保証がありますが、データを事前にランダム化すると、アプリケーションによっては実用的な高速化につながる可能性があることを言及する価値があります。悪いクイックソートのケースは、予想よりも一般的です(明らかに実装に依存します)。O(nlogn)O(n2)
SamM

「ランダムに均一に分布していると言うとき、順列は等しい確率を持っていますか?n!1n!
ロバートS.バーンズ

@ RobertS.Barnesはい
Jernej

4

Jernejが指摘したように、入力のすべての順列が等しくなる可能性が高いという仮定は、実際には常に当てはまるわけではありません。最初のアイデアは、入力配列を並べ替えることです。これは機能しますが、ピボットがランダムに選択される状況を分析する方が簡単です。これは、ランダムサンプリングとも呼ばれます。

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