从大规模数据中高效求解中位数方法探讨.pdfVIP

  • 6
  • 0
  • 约1.21千字
  • 约 3页
  • 2026-04-26 发布于北京
  • 举报

从大规模数据中高效求解中位数方法探讨.pdf

从5亿个数中找出中位数

题目

学习时长:20分钟

题目难度:中等

知识点:双堆法、分治法、大数据量处理

题目描述

从5亿个数中找出中位数。

数据排序后,位置在最中间的数就是中位数。当样本数为奇数时,中位数为第个数;当样本

数为偶数时,中位数为第个数与第个数的均值。

1.解答思路

如果这道题没有内存大小限制,则可以把所有数读到内存中排序后找出中位数。但是排序算法的

时间复杂度都为O(NlogN)。这里使用其他方法。

方法一:双堆法

两个堆,一个大顶堆,一个小顶堆。大顶堆中最大的数小于等于小顶堆中最小的数;保证这两个堆

中的元素个数的差不超过1。

若数据总数为偶数,当这两个堆建好,中位数就是这两个堆顶元素的平均值。当数据总数为奇数

时,根据两个堆的大小,中位数一定在数据多的堆的堆顶。

``

privatePriorityQueueIntegerminHeap;

以上这种方法,需要把所有数据都加载到内存中。当数据量很大时,就不能这样了,因此,这种方法适

用于数据量较小的情况。5亿个数,每个数字占用4B,总共需要2

文档评论(0)

1亿VIP精品文档

相关文档