给两个文件,分别有100亿个URL,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法。

思路

分析

1G内存为10亿字节,所以无法把100亿直接载入内存,所以我们可以通过哈希与位图的结合来处理该问题。先哈希到位图上,在把俩个位图按位与求其交集。

解法

1.我们可以申请100个vector空间,每一个vector空间保存初始化过的1亿个无符号整数。
2.用字符串哈希函数对每个url的MD5结果进行哈希,然后把字符串哈希函数得到的整数结果再进行二次哈希,每个整数都模上100,把该结果作为vector空间的下标。
3 再次把字符串哈希函数的结果模上1亿,把得到的结果在相应的vector中用直接定址法对相应元素赋值为1。
4 把第二个文件重复1-3步,也得到一个哈希过的vector的结果。
5 对相应的vector进行按位与。
6 把任意一个文件的vector结果取出,再对任一一个文件进行遍历,每取出一个url对其先MD5运算,再用字符串哈希再模上100,再找至相应vector中继续用字符串哈希结果模上1亿,再看在该vector中相应元素是否为1,如果为1将url输出不为1代表交集中无该url。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值