**问题:**给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
目录:
文章目录
方案1:每个文件50亿个URL,每个URL最长64个字节,可以估计每个文件安的大小为5000,000,000 ×64bit=320,000,000,000bit ≈ 300,000G,远远大于内存限制的4G,同时需要大硬盘(这里不考虑分布式计算)。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。
-
遍历文件a,对每个url求取 h a s h ( u r l ) % 100 , 000 hash(url)\%100,000 hash(url)%100,000,然后根据所取得的值将url分别存储到100,000个小文件(记为 a 0 , a 1 , a 2 , . . . , a 99998 , a 99999 a_0,a_1,a_2, ..., a_{99998},a_{99999} a0,a1,a2,...,a99998,a99999)中。这样每个小文件的大约为3G。
-
遍历文件b,采取和a相同的方式将url分别存储到10000小文件中(记为 b 0 , b 1 , b 2 , . . . , b 99998 , b 99999 b_0,b_1,b_2, ..., b_{99998},b_{99999} b0,b1,b2,...,b99998,b