假设整数为32bit,4个字节存储

这种题目,首先想到的是分而治之。将文件中数字分组。然后遍历文件中的数字,按分组进行计数。最后找到中位数所在的分组区间

1、如果10G个整数都为同一个,那么10G整数会分布在一个区间,10G=5*2^31 > 2^31 - 1,所以每个分组存储计数的整数用64bit存储。

2、那么2G内存能够存储多少个64bit整数范围呢?2*2^30/8 = 256M 个范围区间。

3、那么每个区间的存储整数的范围长度是多少? 2^32 /256M = 16 

4、所以整数区间段为: 0~15, 16~31, 。。。

5、然后遍历10G个整数的文件,在对应整数区间内计数。

6、找到存在中位数的区间段,并记录这个区间段之前的计数m.

7、重新遍历整数文件,找到m+a0+a1+...an = 5G 中的an,即为中位数

 

posted on 2019-06-13 11:50  yiyezhou2012  阅读(909)  评论(0编辑  收藏  举报