给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url
可以估计每个文件的大小为50G×64=320G,远远大于内存限制的4G,不可能将其完全加载到内存中处理,考虑采取分而治之的方法。
- 第一步:遍历文件a,使用Hash函数将a文件中的url分别存储到1000个小文件中,如(a0....a999)这样每个小文件的大约为300M;遍历文件b,使用相同的Hash函数,将每个url存储到1000个小文件中,如(b0....b999)。这样,所有可能相同的url都存在对应的小文件中(a0对应b0),不对应的文件不可能存在相同的url。
- 第二步:求每对小文件中相同的url,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。