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