100亿个query,1G内存如何找出这俩个文件的交集?分别给出近似算法和精确算法?

本文探讨了在处理大规模数据集时使用的两种不同算法:近似算法与精确算法。近似算法采用布隆过滤器实现快速查询,而精确算法则通过哈希分割技术确保查询结果的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分析

近似算法

  近似算法,用布隆过滤器,对query进行哈希,开70亿个位,刚好差不多比1G小点,再从第一个文件中,读取query,一 个 一 个映射到布隆过滤器里面,再从第二个文件中读取query,一个一个在布隆过滤器里面查询,看是否存在,因为存在不一定准确,但是不存在一定准确,所以这个是可以解决的,所以它是近似算法。

精确算法

  精确算法,一个query字符串大概算60字节,100亿大概600G,那么我们可以进行哈希切割。那么我们切分6000块把源文件,即对源文件中的query字符串进行哈希得到key值,然后用除留余数法进行哈希(%6000),把不同的query放到不同的文件中。
  切割完毕后,读取第二个文件时也是对其分割成6000份,对其每一个字符串进行哈希(MD5),然后得到的key 用除留余数法 看落在那个被切割的子文件中,然后把子文件内容读取到unordered_map中,然后进行find,在不在就是不在。这个就是精确的算法。切割6000块,一块文件大概100M,所以也符合题意。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值