Aritalab:Lecture/Algorithm/Quicksort
From Metabolomics.JP
クイックソートのアルゴリズムは、ソートのページを参照してください。
平均計算量
ピボットをランダムに選ぶクイックソートの平均計算量は、2 n loge n = 1.4 n log2 n といわれます。 その値を導出しましょう。
長さ n の配列をソートする手間数を Cn と書くと、以下の漸化式を満たします。
- C0 = 0
- Cn = (n-1) + (2/n) ∑n-1k=0 Ck
両辺を n 倍して、その式で n を (n-1) と置き換えたものを引き算すると
- n Cn - (n-1) Cn-1 = 2 (n-1) + 2 Cn-2 (n > 1)
この式は n = 1 のとき C1 = 0 となるので、n > 0 で成立します。 つまり、漸化式は
- C0 = 0
- n Cn = (n + 1) Cn-1 + 2 (n-1)
と書き直せます。 和の因子として sn = 2 / n(n+1) を導入すると、漸化式の一般解を用いて解くことができ、
- Cn = 2(n+1) ∑nk=1 1 /(k+1)
となります。
最後に、調和数 (Harmonic number) Ηn = ∑nk=1 1 / k を導入します。
- ∑nk=11 /(k+1) = ∑n+1k=2 1 / k
- = -1 + 1/(n+1) + ∑nk=11 / k
- = - n / (n+1) + Ηn
調和数は Ηn = loge n ですから、 Cn ≒ 2n loge n となります。