1,给定两个整数集合A和B,每个集合都包含20亿个不同整数,请给出快速计算A∩B的算法,算法可使用外存,但是要求占用内存不能超过4GB。
答:
基本思路:利用bitmap以及位运算来实现。
思考过程:整数最大为2的32次方-1;如果每位依次记录一个数,那么需要int的个数是(2的32次方-1)/32=1亿个。占用的内存大小为4byte*1亿=0.4G。不超过题目要求的4G.
因此,解决思路是:
1)申请两个[2的32次方-1]/32个int型的整数数组
2)依次扫描两个集合A和B,如果集合包含某一个整数,就将对应位置1
3)之后将两个用作标志位的两个整形数组做交运算
思考,如果是两个集合中都包含20亿个url呢,如何求出二者的交集(利用bloom过滤器)转换为一个查找操作?<具体实现?>
互联网_大数据
时间: 2024-10-09 02:34:21