Aritalab:Lecture/Algorithm/Quicksort

From Metabolomics.JP
Jump to: navigation, search

クイックソートのアルゴリズムは、ソートのページを参照してください。

平均計算量

ピボットをランダムに選ぶクイックソートの平均計算量は、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 となります。

Personal tools
Namespaces

Variants
Actions
Navigation
metabolites
Toolbox