如何在一亿数据中找到最大的TOP N

如何在一亿数据中找到最大的TOP N

1 考虑要不要重复数据

如果1亿数据有很多重复数据,可以通过hash法把这一亿数据去重复。这样如果重复率很高的话,可以减少很大的内存量,从而缩小运算空间。然后通过最小堆法找出最大的TOP N

2 最小堆法

先读取前N个数创立一个大小为N的最小堆,建堆的复杂度为(mlogm)(m为数组的大小即为N),然后遍历剩余数据,并同时跟堆顶(最小的)数字比较,如果比对顶小,则继续读取更后的数据。如果比堆顶大,则替换堆顶元素,重新调整最小堆的顺序,整个过程直到遍历完全部数据。
然后按中序遍历的方式按中序遍历输出最小堆所有N个数值,该算法的时间复杂度为O(nmlogm),空间复杂度是N(常数)。

此算法比分治法和局部淘汰法好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值