一般的方法:部分排序,堆排序,分治。
从很多数中选取前1000大的数字;
1.考虑全部排序,取到前1000个。但是复杂度很高,本来的数就很多,一般很耗时;
2.利用分治,类似快速排序中的主元选取后划分数组,每次都递减一半的规模,直到1000时候就得到了1000大小的数字。复杂度为n+n/2+n/4...<2n,复杂度O(n);
3.利用小顶堆,维护一个前1000大的小顶堆,如果小于直接丢弃,大于根节点的,存入,再调整。
分布式用多台计算机分别得到前1000的,然后汇总。
内存不够的情况:使用文件读取,每次partition都读写文件。