2N lnNを理解しようとすると、クイックソートが比較されます


13

SedgewickのAlgorithmsブックでクイックソートの分析を行っていました。彼は、N個の異なる項目の配列をソートしながら、クイックソートで比較の数について次の繰り返し関係を作成します。

ここに画像の説明を入力してください

私はこれを理解するのに苦労しています...任意の要素がピボットになるには1 / Nの確率がかかり、kがピボットになると、左のサブアレイにはk-1個の要素があり、右のサブアレイには配列にはNk個の要素が含まれます。

1.パーティション分割のコストはどのようにN + 1になりますか?パーティション分割を行うのにN + 1回比較しますか?

2.Sedgewickは、kの各値について、それらを合計すると、分割要素がkである確率+上記の式を得る2つのサブアレイのコストを言います。

  • 数学の知識が少ない人(私)が理解できるように、誰かがこれを説明できますか?
  • 具体的には、方程式の2番目の項をどのように取得しますか?
  • その用語の正確な意味は何ですか?

1
答えの一部は、en.wikipedia.org / wiki / Quicksortからコピーされました。「すべての可能な分割を平均し、パーティションの比較の数がn-1であることに注意してください。入力のすべての順列の比較の平均数繰り返し関係を解くことにより、シーケンスを正確に推定することができます。 "何らかの理由で、ここでは2-n-1対n + 1離れています。
仕事

回答:


7

Cクイックソートのコスト関数は2つの部分で構成されています。最初の部分は、配列を2つの「半分」に分割するコストです(半分は同じサイズである必要はないため、引用符で囲みます)。2番目の部分は、これら2つの半分をソートするコストです。

  1. この(N + 1)用語は実際には凝縮された用語であり、用語に由来します

    (N - 1) + 2
    

    これは、クイックソートでのパーティション分割のコストです。N-1ピボット値との比較、およびパーティション分割の境界条件による2つの追加比較。

  2. 方程式の2番目の部分は、ピボット値の両側の2つの「半分」をソートするためのコストで構成されますk

    ピボット値を選択すると、ソートされていない「半分」が2つ残ります。これらの「半分」をソートするコストは、サイズに依存し、コスト関数の再帰的なアプリケーションとして最も簡単に説明できますC。ピボットが最小であればN値が、2つの「半分」のそれぞれを分類するためのコストは、それぞれあるC(0)C(N-1)(0の要素を持つアレイとを有するものソートするためのコストソートするためのコストN-1要素)。ピボットが5番目に小さい場合、2つの「半分」のそれぞれを並べ替えるコストはそれぞれC(5)C(N-6)(5つの要素を持つ配列を並べ替えるコストと1つのN-6要素を並べ替えるコスト)です。他のすべてのピボット値についても同様です。

    しかし、ピボット値がわからない場合、これら2つの「半分」をソートするにはどれくらいの費用がかかりますか?これは、ピボットの可能な値ごとにコストを取り、その値に特定の値が現れる可能性を掛けることによって行われます。

    各ピボット値は同様に可能性が高いため、特定のピボット値を選択する可能性1/NN要素がある場合です。これを理解するには、サイコロを転がすことを考えてください。適切なサイコロがあれば、各サイドが上を向くチャンスは等しいため、1を振るチャンスは1/6です。

    組み合わせて、これはピボットの可能な値kごとに、コスト(C(k-1) + C(N-k))にチャンス(1/N)を掛けた合計項を与えます

  3. 2N lnNタイトルの質問への合計公式のさらなる導出は、ここで詳細を説明するにはあまりにも多くの数学を必要としますが、N要素の配列をソートするコスト(C(N))は、N-1要素の配列(C(N-1))とに直接比例する因子N


2
  1. パーティションのステップの比較回数としてのN + 1は、本の誤りであるようです。N–1個の非ピボット要素ごとに、ピボットより小さいか大きいかを確認する必要があります。ピボットは1回の比較を行います。したがって、N + 1ではなく、合計でN–1の比較。(最も単純な場合、N = 2、つまり1つのピボットと1つの他の要素を検討してください。2つの要素間で3つの比較を行う余地はまったくありません。)

  2. 選択したピボットがたまたま最小の要素(k = 1)である場合を考えます。つまり、配列は左側の空の部分(ピボットより小さい要素はありません)と、ピボット以外のすべての要素を含む右側の部分(他のすべての要素はピボットより大きい)に分割されます。 )。これは、再帰的に解決したい副問題のサイズがそれぞれ0とN–1(k–1とN–k)であり、C(0)とC(N–1)の比較が必要であることを意味します。したがって、合計でC(0)+ C(N–1)です。

    ピボットが2番目に小さい要素(k = 2)である場合、副問題のサイズは1およびN–2(k–1およびN–k。左に1つだけあります。ピボット)。したがって、これらの副問題を再帰的に解決するには、C(1)+ C(N–2)比較が必要です。ピボットが3番目に小さい要素、4番目などである場合も同様です。これらは分子内の式です。

    ピボットはN個の要素の中からランダムに選択されるため、各ケース(ピボットが最小、ピボットが2番目に小さいなど)は、1 / Nの確率で発生します。それが、分母のNの由来です。

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