if (|S| < 50) return k-t kleinstes Element per Hand;
else
n = |S|;
zerlege S in Gruppen zu je 5 Elementen
;
Bestimme in jeder Gruppe
den Median
;
Bestimme den Median der Mediane:
m = select
;
A =
x
S | x < m
;
B =
x
S | x == m
;
C =
x
S | x > m
;
if (|A| >= k) return select (A, k);
else if (|A|+|B| >= k) return m;
else /* if (|A|+|B|+|C| >= k) */ return select(C, k-|A|-|B|);
d.h. mind.
der Elemente von
ist
höchstens
der Elemente von
ist
, analog
.
Sei
die Anzahl der Schritte,
die die Methode select benötigt für eine Menge
der
Kardinalität
.
Also:
Beweis durch Induktion:
für
![]()
Sei bisbewiesen
|
|
|
||||||
| Rekursionsgl. | |||||||
|
|
|
||||||
| Ind.-Annahme | |||||||
|
|
|
|
|||||
|
|
q.e.d. |