Tải bản đầy đủ (.pptx) (6 trang)

Discrrete mathematics for computer science recurrence warmup

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (743.28 KB, 6 trang )

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!

2
Because n + .9n + .9 n + … < 10n
So T(n) = O(n)


FINIS



×