Average-case Laufzeit von Quicksort
Average-case Laufzeit von Quicksort
Average-case Laufzeit von Quicksort
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Average</strong>-<strong>case</strong> <strong>Laufzeit</strong> <strong>von</strong> <strong>Quicksort</strong><br />
Definition<br />
(1) H(n) = ∑ n<br />
i=1 1 i<br />
heißt Harmonische Reihe.<br />
(2) lim n→∞ (H(n) − ln n) = 0, 5772156645... heißt Euler-Konstante<br />
(Leonhard Euler, 1707-1783).<br />
(3) V (n) = mittlere Zahl der Vergleiche bei <strong>Quicksort</strong> für Eingabefolgen<br />
der Länge n.<br />
(4) Der Rang eines Elements A[i] in der Eingabefolge A[1], . . . , A[n] gibt<br />
an, an welcher Stelle das Element in der sortierten Folge steht, d.h.<br />
Rang(i) = 1 + |{k; A[k] < A[i]}|.<br />
Satz<br />
V (n) = 2(n + 1)H(n) − 4n ≈ 1.386 · n log(n) − 2.846 · n.<br />
Burkhard Monien (University of Paderborn) <strong>Average</strong>-<strong>case</strong> <strong>Laufzeit</strong> <strong>von</strong> <strong>Quicksort</strong> DuA SS 2006 1 / 6
Beweis I<br />
Wenn Rang(n) = q ist, dann ist die Zahl der durchgeführten Vergleiche<br />
(n − 1) + V (q − 1) + V (n − q).<br />
Wenn über alle Permutationen gemittelt wird, nimmt Rang(n) jeden Wert<br />
aus {1, . . . , n} mit gleicher Häufigkeit an. Somit ergibt sich für die<br />
durchschnittliche Zahl <strong>von</strong> Vergleichen:<br />
V (1) = 0 und für n > 1 :<br />
∑<br />
σ∈Perm(n)<br />
V (n) =<br />
V (σ)<br />
n!<br />
= 1 (<br />
(n − 1)n! + n!<br />
n!<br />
n<br />
= n − 1 + 1 n<br />
n∑ ( ) )<br />
V (q − 1) + V (n − q)<br />
q=1<br />
n∑ ( )<br />
V (q − 1) + V (n − q)<br />
q=1<br />
Burkhard Monien (University of Paderborn) <strong>Average</strong>-<strong>case</strong> <strong>Laufzeit</strong> <strong>von</strong> <strong>Quicksort</strong> DuA SS 2006 2 / 6
Beweis II<br />
Jedes V (q) tritt in der Summe zweimal auf.<br />
V (n) = n − 1 + 1 n<br />
= n − 1 + 2 n<br />
Multiplikation mit n liefert:<br />
n∑ ( )<br />
V (q − 1) + V (n − q)<br />
q=1<br />
n∑<br />
V (q − 1)<br />
q=1<br />
n · V (n) = n(n − 1) + 2<br />
n∑<br />
V (q − 1) (1)<br />
q=1<br />
Wenn wir n − 1 für n substituieren, erhalten wir:<br />
∑n−1<br />
(n − 1)V (n − 1) = (n − 1)(n − 2) + 2 V (q − 1) (2)<br />
q=1<br />
Burkhard Monien (University of Paderborn) <strong>Average</strong>-<strong>case</strong> <strong>Laufzeit</strong> <strong>von</strong> <strong>Quicksort</strong> DuA SS 2006 3 / 6
Beweis III<br />
(1) - (2) ergibt:<br />
n∑<br />
nV (n) − (n − 1)V (n − 1) = n(n − 1) + 2 V (q − 1)<br />
q=1<br />
⎛<br />
⎞<br />
∑n−1<br />
− ⎝(n − 1)(n − 2) + 2 V (q − 1) ⎠<br />
q=1<br />
= n(n − 1) − (n − 1)(n − 2) + 2V (n − 1)<br />
Also:<br />
nV (n) − (n + 1)V (n − 1) = 2(n − 1)<br />
Division durch (n + 1) · n:<br />
V (n) V (n − 1) 2(n − 1)<br />
= +<br />
n + 1 n n(n + 1)<br />
Burkhard Monien (University of Paderborn) <strong>Average</strong>-<strong>case</strong> <strong>Laufzeit</strong> <strong>von</strong> <strong>Quicksort</strong> DuA SS 2006 4 / 6
Beweis IV<br />
Wir schreiben Z(n) für V (n)<br />
n+1<br />
und erhalten:<br />
V (n) V (n − 1) 2(n − 1)<br />
= +<br />
n + 1 n n(n + 1)<br />
2(n − 1)<br />
⇒ Z(n) = Z(n − 1) +<br />
n(n + 1)<br />
Es ist Z(1) = 0 und Beweis durch Induktion ergibt:<br />
Z(n) = 2<br />
n∑<br />
q=2<br />
q − 1<br />
q(q + 1)<br />
Burkhard Monien (University of Paderborn) <strong>Average</strong>-<strong>case</strong> <strong>Laufzeit</strong> <strong>von</strong> <strong>Quicksort</strong> DuA SS 2006 5 / 6
Beweis V<br />
1<br />
Wegen<br />
q(q+1) = 1+q−q<br />
q(q+1) = 1 q − 1<br />
q+1 folgt:<br />
n∑ q − 1<br />
n∑<br />
( q − 1<br />
Z(n) = 2<br />
q(q + 1) = 2 − q − 1 )<br />
q q + 1<br />
q=2<br />
q=2<br />
[( 1<br />
= 2<br />
2 − 1 ( 2<br />
+<br />
3)<br />
3 − 2 ( 3<br />
+<br />
4)<br />
4 − 3 + .. +<br />
5)<br />
[( 1<br />
= 2<br />
2 + 1 3 + 1 4 + 1 5 + · · · + 1 )<br />
− n − 1 ]<br />
n n + 1<br />
( n − 1<br />
Es folgt:<br />
Z(n) = 2H(n) − 2 − 2 n − 1<br />
n + 1 = 2H(n) − 4n<br />
n + 1<br />
Somit gilt für unsere durchschnittliche Zahl <strong>von</strong> Vergleichen:<br />
V (n) = (n + 1)Z(n) = 2(n + 1)H(n) − 4n<br />
≈ 2(n + 1) ln n − 2.846 · n.<br />
n<br />
− n − 1 )]<br />
n + 1<br />
Burkhard Monien (University of Paderborn) <strong>Average</strong>-<strong>case</strong> <strong>Laufzeit</strong> <strong>von</strong> <strong>Quicksort</strong> DuA SS 2006 6 / 6<br />
□