从两个文件(各含50亿个url)中找出共同的url

问题:给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?

 (昨天参加安卓越 笔试,其中的最后一道解答题)

解答:

每个文件 50亿*64B 约为300GB大小,内存肯定是装不下了。

毫无疑问还是采用分而治之的思想:

1.  遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为a0,a1,...a999)当中;

遍历文件b,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为b0,b1,...b999)当中;

这样处理后,所有可能相同的url都在对应的小文件(a0-b0, a1-b1....a999-b999)当中,不对应的小文件(比如a0-b99)不可能有相同的url。

2.  统计1000对文件中相同的url,采用hash_set.

比如对a0-b0,遍历a0,将其中的url存储到hash_set当中;

然后遍历b0,如果url在hash_map中,则说明此url在a和b中同时存在,保存到文件中即可。

你可能感兴趣的:(url,笔试题)