给定一个未排序的整数序列,该整数序列作为流流入您的程序。
整数太多,无法放入内存。
想象有一个函数:
int getNext() throws NoSuchElementException;
它从流中返回下一个整数。
编写函数以找到中位数。
解决O(n)中的问题。
有任何想法吗?
给出了提示(使用堆的数据结构..)
参见本文。(可能)需要超过一次通过。想法是在每次通过中计算上限和下限,以使中位数位于它们之间。
此处的基本结果是 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)_次。
阅读论文。我不太确定堆与它有什么关系