两个海量文件,各存放50亿url,每个url各占64字节,内存的限制是4G,让你找出a,b中共同的url。
1G=80亿but,每个文件5G*64=320G,远超过4G的限制,那怎么办呢?
还是利用分而治之,主要步骤是:
- 将两文件都用hash(url)%1000,分成1000个小文件,这样两个文件中所有可能相同的url都会被分到相同下标的两个小文件中。
- 320G/1000,那么每个文件大约300M。这样可以同时载入内存,利用map的特性,先构造一个文件的map,然后再遍历另一个文件,遇到相同的就得到了共同的url。
- 将遍历过程中的共同的url直接写入文件,防止map的空间也会超过内存。