有5億個整數,沒有排序。找到他們的中位數
使用雙層桶劃分(分而治之)的策略。假設題目中指的是32位的無符號整數,共有2 ^ 32個數字。
我們將2 ^ 32這個範圍劃分成2 ^ 10個區域。對資料進行第一次掃瞄,統計各個落到各個區域內的數字的個數。
第一次掃瞄後,通過統計就可以知道,中位數在哪個區域內,以及它是這個區域的第幾大的數字。
進行第二次掃瞄,這次只統計落到目標區域內的數字,同時結合bitmap記錄都出現了哪些數字。最後通過bitmap和第一次掃瞄的結論,就可以找到那個中位數了。
求海量個無序整數的中位數
在乙個檔案中有 10g 個整數,亂序排列,要求找出中位數。記憶體限制為 2g。不妨假設10g個整數是64bit的。2g記憶體可以存放256m個64bit整數。我們可以將64bit的整數空間平均分成256m個取值範圍,用2g的記憶體對每個取值範圍內出現整數個數進行統計。這樣遍歷一邊10g整數後,我們便...
100億個整數,找出中位數
100億個整數,記憶體足夠,如何找到中位數?記憶體不足,如何找到中位數?1 當記憶體足夠時 採用快排,找到第n大的數。隨機選取乙個數,將比它小的元素放在它左邊,比它大的元素放在右邊 如果它恰好在中位數的位置,那麼它就是中位數,直接返回 如果小於它的數超過一半,那麼中位數一定在左半邊,遞迴到左邊處理 ...
40億個32位整數求中位數
40億個32位整數,想找到其中的中位數該怎麼辦?按行讀取檔案,讀取操作不占用記憶體。2 k 應該都能夠熟記,達到反射性反應的程度。位元組數對應計算機中的容量 t,g,m,k 1k 2 10 10 3,一千 1m 2 20 10 6,一百萬 1g 2 30 10 9,十億 int型為有符號32位整數,...