笔试面试题目:求海量数据的中位数

      原文发表于:

     中位数,也就是排序后位置在中间的数。中位数是笔试面试中的常客,在N年前T公司的实习生招聘和校园招聘中,两次遇到了这个问题。

非海量数据的中位数

      参考之前的文章:top-K问题和随机选择算法。显然,我们可以使用:

      1. 快速排序算法

          排序后,直接找出中位数。

      2. 直接选择算法

          直接选择,直到选到中位数。

      3. 堆选择算法

          堆选择,最后选到中位数。

      4. 随机选择算法

          随机选择算法,找到中位数。

海量数据的中位数

      如果是求海量数据的中位数,那就不太好用上述方法了,因为没法把大文件中的海量数据加载到内存中。那该怎么办呢?

     参考之前的文章:华山论剑之桶排序。注意,我们需要求的是中位数,而不是排序。具体步骤如下:

     Step1: 创建多个小文件桶,设定每个桶的取值范围,然后把海量数据元素分配到对应的桶中,并记录桶中元素的个数。

     Step2: 根据桶中元素的个数,计算出中位数所在的桶,然后针对该桶进行排序,就可以求出海量数据中位数的值。

     具体示意图如下:

     

     中位数,其实就是特殊的顺序统计量。无论是非海量数据还是海量数据,我们都可以很快地找出中位数。

猜你喜欢

转载自blog.csdn.net/stpeace/article/details/108921752
今日推荐