Use Randomized-Partition ( A, p, r ) from randomized quick
sort. Consider only the sub array were ai¢
is:
Randomized-Select (A, p, r, i)
- if p = r
- then return A[p]
- q ¬ Randomized-Partition (A, p, r)
- k ¬ q - p + 1 ( length of first
sub-array
- if i £ k
- then return Randomized-Select (A, p, q, i)
- // in first sub-array
- else return Randomized-Select (A, q + 1, r, i - k)
- // in second sub-array, (i - k)th order
As with randomized Quick-Sort, worst-case running time is Q
(n2)
What is the expected running time?
Recall i = 1 with probability 2/n.
i = 2,3,4,...n - 1 with probability
1/n
T ( n ) £ |
1/n ( T ( max ( 1, n-1 ) ) + |
n -1
å
k = 1
|
T ( max ( k, n - k
))) + |
|
O (n) |
Maximum because the upper bound occurs when the partitioning is against
us.
£ 1/n ( T (
n-1 ) + 2 |
n -1
å
k =é
n/2 ù |
T ( max ( k, n - k
))) + O (n) |
|
|
= 2/n |
n -1
å T ( k ) + O ( n )
k =é n/2 ù |
.
Assume T ( n ) £ c n and substitute
T ( n ) £ |
2/n |
n-1
å
k =é
n/2 ù
|
c k +  O
(n) |
|
|
= 2 c / n ( |
n-1
å k -
k = 1 |
é n/2 ù -1
å k   )
k = 1 |
+ O ( n ) |
= 2 c / n ( (n-1) n / 2 - (( é n
2 ù -1 ) é n
2 ù / 2 ) + O ( n )
£ c ( n-1 ) - c/n ( n/2 - 1 ) ( n/2 ) + O
( n )
= c ( 3/4 n - 1/2 ) + O ( n )
£ c n ,
c s.t. c ( n/4 + 1-2 ) >>
O ( n )
T ( n ) = O ( n ) for randomized select.