题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。

 

不妨假设10G个整数是64bit的。
2G内存可以存放256M个64bit整数。
我们可以将64bit的整数空间平均分成256M个取值范围,用2G的内存对每个取值范围内出现整数个数进行统计。这样遍历一边10G整数后,我们便知道中数在那个范围内出现,以及这个范围内总共出现了多少个整数。
如果中数所在范围出现的整数比较少,我们就可以对这个范围内的整数进行排序,找到中数。如果这个范围内出现的整数比较多,我们还可以采用同样的方法将此范围再次分成多个更小的范围(256M=2^28,所以最多需要3次就可以将此范围缩小到1,也就找到了中数)。

 

FROM:http://hi.baidu.com/mianshiti/blog/item/104589c069dfec5eb219a815.html

posted on 2011-09-30 16:35  dartagnan  阅读(507)  评论(0编辑  收藏  举报