面試題:在一個文件中有 10G 個整數,亂序排列,要求找出中位數(內存限制為2G)


假設整數為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,即為中位數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM