问题:数据太大,在内存中无法一次性装入。
题1:给定一个大小超过100亿的文件,该文件是用来存储IP地址,找到出现次数最多的IP地址。
分析:100亿就是大约就是10G,对于现在的计算机而言,内存中无法容纳这么大的文件。
解决:将一个大文件切分为多个小文件,例如:我们可以将该100亿的大文件切分为1000个文件,即每个文件的大小大约就是10M,那么就可以在内存中容纳得下了。
那么,我们要怎么来切分这个100亿的大文件呢?平均分?很显然是不可以的,如果分到某个文件的IP地址出现的次数都是1次,那么该文件出现最多的IP就是这10M个IP。那么就会浪费很大的空间,不符合我们的预期。所以,在此我们可以采用哈希表的方式,对IP先转换为对应的整数,在对该数取模,将模相同的IP放在同一个文件之中,那么这样在同一个文件中出现IP相同的概率就会大一些。
然后我们就可以分别统计出这1000个文件中IP次数最多的IP,然后再将这1000个文件进行汇总。如下面的图解。
题2:给定100亿个整数,找到其中只出现一次的整数。
分析:遇到这样的问题,我们首先想到的处理方法就是&#x