1.只用2GB内存在20亿个整数中找到出现次数最多的数
有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数
32位整数 = 4B
用Hash表来存,一条记录就是一个key, 一个value, 都用无符号整数保存, 需要8B内存。
记住10^9 = 1G
2亿个整数,2*10^8 * 8 = 1.6G
20亿个数最极端的情况需要16G内存。
将2亿个整数分程16个文件,每次处理1个文件,然后找出最多的数,再16个比较一次即可。
40亿个非负整数中找到未出现的数
32位无符号整数的范围是0~4294967295, 现在有40亿个无符号整数,所以在整个无符号中必然有未出现的数,最多可以使用1G内存,怎么找到未出现过的数
假设全部Hash, 40*4 = 160*10^8 = 16GB内存
这里使用bit map的方法,申请一个长度为4294967295长度的bit类型的数组,bitArray上每一位只表示0或1
8个bit = 1B
所以只需要500MB的空间。
遍历一遍数据,将出现过的bitArray设为1,为0的就是没出现过的。
大数据问题最基础的就是计算数据规模
记住10^9 = 1GB = 10亿
10^6 = 1MB = 百万