从十亿个数中找出前1000个最大的数的算法

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值