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

分析

近似算法

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

精确算法

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

你可能感兴趣的:(算法题)