ランダムクイックソートは、ピボットエレメントがランダムに選択されるクイックソートの拡張機能です。このアルゴリズムの最悪の場合の時間の複雑さは何ですか。私によると、それがあるべきであるランダムに選択されたピボットが選択される場合、最悪の場合に起こるように、ソートまたは逆ソート順序。しかし、いくつかのテキスト[1] [2]では、最悪の場合の時間の複雑さは
何が正しいの?
ランダムクイックソートは、ピボットエレメントがランダムに選択されるクイックソートの拡張機能です。このアルゴリズムの最悪の場合の時間の複雑さは何ですか。私によると、それがあるべきであるランダムに選択されたピボットが選択される場合、最悪の場合に起こるように、ソートまたは逆ソート順序。しかし、いくつかのテキスト[1] [2]では、最悪の場合の時間の複雑さは
何が正しいの?
回答:
両方のソースは、の「最悪の予想実行時間」を参照しています。これは予想される所要時間を指していると思いますが、これは絶対的な最悪の場合とは異なります。
クイックソートには通常、絶対最悪の時間要件があります。最悪のケースは、すべてのステップで、パーティションプロシージャが長さnの配列をサイズ1とn − 1の配列に分割するときに発生します。ピボット要素のこの「不運」選択が必要O (N )に至る、再帰呼び出しをO (N 2)ワーストケース。
編集:
これらのテキストは、「最悪の場合のランタイム」ではなく、「最悪の場合の予想実行時間」について述べていることを忘れていました。
彼らは、ランダム要素を含むクイックソートの実装について議論しています。通常、決定論的アルゴリズムがあります。これは、指定された入力に対して常にまったく同じステップを生成するアルゴリズムです。「最悪の場合のランタイム」を判別するには、可能なすべての入力を調べ、最悪のランタイムを生成する入力を選択します。
しかし、ここにはランダムな要因があります。何らかの入力が与えられると、アルゴリズムはランダム性が関係するため常に同じステップを実行するとは限りません。固定入力ごとにランタイムを使用する代わりに、「予想ランタイム」を使用します。ランダム決定の可能性のある各値とその確率をチェックし、「予想ランタイム」はランダム決定の各組み合わせのランタイムの加重平均です、それでも固定入力用。
したがって、考えられる各入力に対して「予想ランタイム」を計算し、「最悪の場合の予想ランタイム」を取得するために、予想ランタイムが最悪の場合に考えられる1つの入力を見つけます。そして明らかに、彼らは「期待される実行時」の最悪のケースはただのO(n log n)であることを示した。最初のピボットをランダムに選択するだけで、ワーストケースの予想ランタイムがo(n ^ 2)(ビッグOの代わりにリトルo)に変更されても、nピボットのうち少数が最悪ケースにつながるので驚かないでしょう動作。
入力の順列とピボット(パーティションごとに1つ)の2つのことを期待/平均することに注意してください。
結論として、ソースを使用して、どの実装を使用し、ランダムな応答と見なす量を確認します。分析で修正されました。
ランダム化クイックソートの最悪のケースは、入力と同じ要素です。例:2,2,2,2,2,2