100億個整數,找出中位數

2021-08-04 08:37:23 字數 590 閱讀 9538

100億個整數,記憶體足夠,如何找到中位數?記憶體不足,如何找到中位數?

(1)當記憶體足夠時:

採用快排,找到第n大的數。

• 隨機選取乙個數,將比它小的元素放在它左邊,比它大的元素放在右邊

• 如果它恰好在中位數的位置,那麼它就是中位數,直接返回

• 如果小於它的數超過一半,那麼中位數一定在左半邊,遞迴到左邊處理(還是第幾大)

• 否則中位數一定在右半邊,根據左半邊的元素個數計算出中位數是右半邊的第幾大(重新算第幾大),然後遞迴到右半邊處理

(2)當記憶體不足時:

分桶法

把所有數劃分到各個小區間,把每個數對映到對應的區間裡,對每個區間中數的個數進行計數,數一遍各個區間,看看中位數落在哪個區間,若夠小,使用基於記憶體的演算法,否則繼續劃分。

比如數是32位的,根據每個整數的二進位制前5位,劃分為32個桶,把數放進對應桶中。如果該桶放不下,繼續劃分,直至記憶體可以放心為止。統計每個桶中元素個數,算出中位數一定出現在哪個桶中,而且計算出是該桶中的第幾大。

5億個無序整數 找中位數

有5億個整數,沒有排序。找到他們的中位數 使用雙層桶劃分 分而治之 的策略。假設題目中指的是32位的無符號整數,共有2 32個數字。我們將2 32這個範圍劃分成2 10個區域。對資料進行第一次掃瞄,統計各個落到各個區域內的數字的個數。第一次掃瞄後,通過統計就可以知道,中位數在哪個區域內,以及它是這個...

求100億個數的中位數

給定100億個無符號的亂序的整數序列,如何求出這100億個數的中位數 中位數指的是排序後最中間那個數 乙個無符號整數的大小為4b,則100億個數的大小為40gb,如果記憶體夠大的話可以對這100億個數載入到記憶體中,然後使用堆排序或者快速排序進行排序,取出中位數即可。使用快排時,每次劃分之後只需要比...

求100億個數的中位數

1 題目描述 給定100億個無符號的亂序的整數序列,如何求出這100億個數的中位數 中位數指的是排序後最中間那個數 2 解題思路一 乙個無符號整數的大小為4b,則100億個數的大小為40gb,如果記憶體夠大的話可以對這100億個數載入到記憶體中,然後使用堆排序或者快速排序進行排序,取出中位數即可。使...