思路:分而治之+Hash(将任意长度输入通过散列变成固定长度输出)。内存有限制的话,先根据哈希值分组,保证每个组都能在内存里存下。
1、“分而治之”的思想,按照I数据的Hash(key)%1024值,把海量数据分别存储到1024个小文件中 :O(N)
2、使用hashmap结构存储出现的数据的频次,key-数据值(第k个文件夹中),value-数据频次(第k个文件夹中)
3、取其中频次最多的数据再进行合并hashmap
当然第二步,如果问题统计的不是频数,可以采用另外一种思路,问海量数据中最大(小)的K个值
2、借助堆这个数据结构,找出Top K,时间复杂度为N‘logK。K是要维护多大的堆。
两组数求交集:十亿个数的集合和10w个数的集合,如何求它们的交集。集合的数字不重复。
只对小数组进行处理,对小数组做hash,然后遍历大数组即可。