问题:给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
分析:50亿个url,每个url64字节,就是320G,显然是无法一次读入内存的。因此这里需要采用分治法。
方案:分治法,分支方法:哈希
步骤:
如图所示:
![海量数据处理面试题(1) 找出两文件种包含的相同的url 海量数据处理面试题(1) 找出两文件种包含的相同的url](/default/index/img?u=aHR0cHM6Ly9waWFuc2hlbi5jb20vaW1hZ2VzLzkwOC9iMjI1YTNlNGFmMDYwYmU5NjcwZDlmZGQzZjU3Nzc4NC5wbmc=)
1 将AB两个文件,用相同的哈希函数,分解为1000个独立哈希值相同的小文件,这里哈希函数的设计是个重点。
2 哈希值不同的url必然不在序号对应的文件中,因此只要在序号对应的两个文件中进行互相匹配即可。
3 比较每对小文件时,可以使用hash_set。
把url换成数字的话,哈希函数更容易构造。