60 likes | 145 Views
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
E N D
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)