海量数据问题总结

海量数字里,找出topK

找出topK,这个很明显想到可以用最大堆去做;而数据量过大的话,可以分而治之,就是把这些数据划分到多个文件里面,对每个文件找出topK,最后再合并到一起,找出总的topK
至于怎么划分,可以使用一些哈希算法来划分,或者因为这里这是比较值的大小,所以直接进行机械划分也是可以的。

海量数据里,返回出现频率最高的topK

同样还是用最大堆,但是这个大不再是数值的大,而是频率的大,所以可以使用一个HashMap,value来记录出现的频率。当然如果数据太大的话,还是可以使用分而治之的方法,可以使用一些哈希算法去进行分组,保证相同的数据在一个文件里面。最后再进行归并
另外,如果

两个文件的数据,找出相同的部分

如果是数字,可以使用一个BitMap来做,就是一个比特可以标记一个数字,比如说0代表没有出现,而1代表出现过。那么首先可以对其中一个文件进行标记,把标记完的BitMap再拿去第二个文件中去比较,进而就能找到相同的部分了。当然这个过程依然也是可以使用分而治之的方法

如果是字符串的话,可以考虑使用布隆过滤器,这个其实用现成的,Google不是有个Guava工具么,它里面就有BloomFilter类,可以做这个事情。

在海量数据中快速定位一个数字是不是在里面

思路也一样,用bitMap

海量数据中找到所有出现次数大于2次的

也可以使用BitMap来做,用两个比特标识一个数字的出现情况,比如说00表示从未出现过,01表示出现过一次,10表示出现过两次,11表示出现两次或以上的。那么对所有数据标识完之后,找到那些标记位位11的就是结果了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值