前两天同学面试遇到的一道题,大数据怎么找出中位数。大数据 --> 所有数据不能一下子读入内存
中位数 --> 需要遍历所有数据
1. 题目
在一个大文件中有100亿个32位整数,乱序排列,要求找出中位数;内存限制为512M;请写出算法设计思路;
2. 基本知识b --> bit 比特,位(二进制中的位)
B --> Byte 字节,1个字节=8位,1B=8bit
K --> KB 千字节,1KB = 1024B
M --> MB 兆字节,1M = 1024KB = 1024*1024B
G --> GB 1GB = 1024MB
问题分析:
100亿个32位整数,那么占用内存为:100亿*32 b = 100亿*32/8 B = 100亿*32/8/1024 KB = 100亿*32/8/1024/1024 MB = 38146.9727 MB > 512M
所以肯定不能一次全部载入内存。
那么512M可以装多少个32位整数呢?512M=512*1024K=512*1024*1024B=512*1024*1024*8b=4294967296b
可存储32位整数:4294967296b/32b=134217728个,是1亿多个。
3. 设计思路
中位数需要遍历数据才能找出来,512M是我们可用的内存限制,每次只能载入1亿多个数据,100亿个数据,我们可以分成100次进行载入遍历。<