10亿个数中找出1000个最大的数的算法思路:
1,先拿出前1000个数字,并排序,找出最小值为 minValue .
2, 然后再依次拿出1000个数字,找出最大值为 tempMaxValue.
3, 如果tempMaxValue 比 minValue 大, 则将 theMaxValue 放入前1000个数中,再排序并找出minValue .
4 … 依此类推。 即可得到1000个最大的数。
(使用最小堆的数据结构)
其他非最优解法:
1、直接全部排序,内存不够用怎么办?
2、当内存限制2G后,单台机器无法支撑这么大数据量的排序,分别用多台机器分组排序,取出每台机器的最大值,再进行排序,这样机器浪费太多了。
3、分组生成1000个小文件,再取出各个文件中最大的数,会多次读写磁盘,效率低。
参考博文:
https://www.cnblogs.com/relang99/archive/2008/05/18/1202073.html
https://cloud.tencent.com/developer/article/1497951