题目描述:
1T的文件,使用行储存,其中有唯一的两行重复,目前只有一台计算机,内存不足以容纳1T文件,比如是256M,128G,问如何使用单机寻找出这两行数据?
分析解答:
方法:分治法。
解题思路:对于大数据相关的算法题,分治法是一个非常好的方法。针对这一题来说,主要思路为:因为文件是按行储存的,我们可以一行一行的读取文件,当每读取到一行,取它的hashcode,可以根据实际可用内存的情况,确定一个Hash函数,比如:hashcode%2000,通过这个Hash函数可以把每行根据模数值划分到2000个小文件中去(a1,a2,a3……,a2000),比如得到的模数值为1,就放到a1中,模数值为2,就放到a2中…,因为相同的行的hashcode一定相同,所以相同的行必定在同一个小文件中,如果划分后的小文件比较小了,就可以把小文件直接装载到内存中去,进行遍历就可以查找到相同的两行。如果划分后的小文件还是很大,就说明还可以继续调优,根据实际可用内存情况比如把2000调整为20000,这样就把整个文件分成了20000个小文件,对每个小文件遍历,就可以查找出相同的两行。