O(n) algorithm to find the median of a collection of numbers

后端 未结 3 1918
[愿得一人]
[愿得一人] 2020-11-27 14:59

Problem: input is a (not necessarily sorted) sequence S = k1, k2, ..., kn of n arbitrary numbers. Consider the collection C of n² numbers of the form min{ki,kj}, for 1 <=

3条回答
  •  生来不讨喜
    2020-11-27 15:42

    Yes, good puzzle. We can find median developing on the lines you said.

    In C we have 1 occurence of max(k), 3 occurrence of next highest, 5 of next highest and so on

    1. If we ordered elements of C, number of elements on the left of mth highest number is m^2 (sum of odd numbers)

    2. The numbers that we are interested in (to calculate median) a. If n is odd is (n^2+1)/2 = alpha b. If n is even then alpha1 = n^2/2 and alpha2 = n^2/2+1 but alpha1=n^2/2 is never a square number => the number immediately on the right of alpha1 is equal to alpha1 (sum of first m odd numbers is square) => alpha1=alpha2.

    3. So it boils down to determining m such that m^2 (sum of first m odd numbers) is just higher than (n^2/2)

    4. So it boils down to determining m=ceiling(n/sqrt(2) and mth highest number in original sequence. (Whether to find mth highest or (n-m-1)th lowest is optimization).

    5. We can easily find mth highest number (just keep noting first m largest number from left) or use median of medians algortithm to do it in linear time.

提交回复
热议问题