Transcript warmup

Recurrence Warmup
Finding the Median Without Sorting
Generalize to finding the k’th largest element of
a list: Find(L, k)
Median ::= Find(L, |L|/2)
Find(L, k)
Let |L| = n. Assume distinct elements
Divide L into blocks of 5 and find the medians
(third of five elements) of the blocks:
O(n) time.
Recursively find the median of the medians, M
M < half the medians, and each median < 2 of
the 5 elements of its block
So those medians are < 2/10 of the elements of
L
So M < 3/10 of the elements of L
Likewise M > 3/10 the elements of L
Find(L, k)
Use M to split L into two sublists: elements <
M and elements > M.
On the basis of the size of these lists, figure
out which part the k’th element of L
belongs to.
Recursively find the corresponding element
within that sublist, which is of size at most
7n/10.
Analysis
• T(1) = 1
• T(n) ≤ T(n/5) + T(7n/10)
• (Time to find median of medians plus time
to select from elements that have not been
excluded)
• Linear solution!
Because n + .9n + .92n + … < 10n
So T(n) = O(n)
FINIS