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

    科技2022-07-16  97

          原文发表于:

     

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

     

     

    非海量数据的中位数

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

          1. 快速排序算法

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

     

          2. 直接选择算法

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

     

          3. 堆选择算法

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

     

          4. 随机选择算法

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

     

     

    海量数据的中位数

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

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

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

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

     

         具体示意图如下:

     

         

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

     

     

    涛歌依旧 认证博客专家 排名第一 点链接学人工智能 公众号免费领资料 ❤️零基础入门进阶人工智能 ❤️欢迎关注涛哥公众号,免费领海量学习资料。涛哥:毕业后就职于华为和腾讯。微信:ai_taogeyijiu
    Processed: 0.008, SQL: 8