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. |