在乙個檔案中有 10g 個整數,亂序排列,要求找出中位數。記憶體限制為 2g。
不妨假設10g個整數是64bit的。
2g記憶體可以存放256m個64bit整數。
我們可以將64bit的整數空間平均分成256m個取值範圍,用2g的記憶體對每個取值範圍內出現整數個數進行統計。這樣遍歷一邊10g整數後,我們便知道中數在那個範圍內出現,以及這個範圍內總共出現了多少個整數。
如果中數所在範圍出現的整數比較少,我們就可以對這個範圍內的整數進行排序,找到中數。如果這個範圍內出現的整數比較多,我們還可以採用同樣的方法將此範圍再次分成多個更小的範圍(256m=2^28,所以最多需要3次就可以將此範圍縮小到1,也就找到了中數)。
10G數中找到前5G大的數
處理海量資料常用 堆排序 1 不需要一次性將所有資料載入到記憶體中 2 不用對所有元素進行排序,只需要和堆的根結點比較大小即可 3 對於海量資料而言,要求前k小 大的數,我們只需要構建乙個k個大小的堆,然後將讀入的數依次和根節點比較就行了 當然這裡的前提是記憶體需要存的下k個數 最大堆求前n小,最小...
10G個數找中位數
題目 在乙個檔案中有 10g 個整數,亂序排列,要求找出中位數。記憶體限制為 2g。只寫出思路即可 記憶體限制為 2g的意思就是,可以使用2g的空間來執行程式,而不考慮這台機器上的其他軟體的占用記憶體 關於中位數 資料排序後,位置在最中間的數值。即將資料分成兩部分,一部分大於該數值,一部分小於該數值...
100萬個數中找到最大的100個數
1.演算法如下 根據快速排序劃分的思想 1 遞迴對所有資料分成 a,b b b,d 兩個區間,b,d 區間內的數都是大於 a,b 區間內的數 2 對 b,d 重複 1 操作,直到最右邊的區間個數小於100個。注意 a,b 區間不用劃分 3 返回上乙個區間,並返回此區間的數字數目。接著方法仍然是對上一...