如何在一亿数据中找到最大的TOP N
1 考虑要不要重复数据
如果1亿数据有很多重复数据,可以通过hash法把这一亿数据去重复。这样如果重复率很高的话,可以减少很大的内存量,从而缩小运算空间。然后通过最小堆法找出最大的TOP N
2 最小堆法
先读取前N个数创立一个大小为N的最小堆,建堆的复杂度为(mlogm)(m为数组的大小即为N),然后遍历剩余数据,并同时跟堆顶(最小的)数字比较,如果比对顶小,则继续读取更后的数据。如果比堆顶大,则替换堆顶元素,重新调整最小堆的顺序,整个过程直到遍历完全部数据。
然后按中序遍历的方式按中序遍历输出最小堆所有N个数值,该算法的时间复杂度为O(nmlogm),空间复杂度是N(常数)。
此算法比分治法和局部淘汰法好。