一尘不染

从整数流中找到中位数

algorithm

给定一个未排序的整数序列,该整数序列作为流流入您的程序。

整数太多,无法放入内存。

想象有一个函数:

int getNext() throws NoSuchElementException;

它从流中返回下一个整数。

编写函数以找到中位数。

解决O(n)中的问题。

有任何想法吗?

给出了提示(使用堆的数据结构..)


阅读 247

收藏
2020-07-28

共1个答案

一尘不染

参见本文。(可能)需要超过一次通过。想法是在每次通过中计算上限和下限,以使中位数位于它们之间。

此处的基本结果是 N =数据大小, P =通过次数

定理2)选择 N个 元素中第 K 个最高的 P- pass算法最多需要存储 O(N 1 / P (logN) (2- 2 / P __

同样,对于很少量的存储 S ,即对于 2 <= S <= O((log N)2),存在一类选择算法,最多使用 _O((log N) 3 /S)_次。

阅读论文。我不太确定堆与它有什么关系

2020-07-28