题目
在一个包含20亿个全是32位整数的大文件中找到出现次数最多的数
要求
内存2GB
解答
想要在很多整数中找到出现次数最多的数,通常的做法是使用哈希表对出现的数做词频统计,哈希表的key是某一个整数,value是这个数的个数。但是对于20亿个数全是不同的情况内存(2GB)可能不够用。
我们可以用哈希函数把20亿个数的大文件用哈希函数分成16个小文件,根据哈希函数的性质,同一种数不可能被分到不同文件中,同时同一文件中数的保证不会超过2亿类(20/16<2),因为种类为2亿类刚刚内存够用。然后对每一个文件用哈希表来统计其中每种数出现的个数即可。
把一个大集合通过哈希函数分配到多台机器中,或者分配到多个文件中,这种技巧是处理大数据面试题时最常用的技巧。但是分配多少机器、分配多少文件,在解题时一定要确定下来。根据题意或者和面试官沟通。