多層劃分

多層劃分

方法介紹

多層劃分法,本質上還是分而治之的思想,因爲元素範圍很大,不能利用直接尋址表,所以通過多次劃分,逐步確定範圍,然後在一個可以接受的範圍內進行查找。

問題實例

1. 尋找不重複的數

2.5 億個整數中找出不重複的整數的個數,內存空間不足以容納這 2.5 億個整數

分析:類似於鴿巢原理,因爲整數個數爲 2
32,所以,我們可以將這 2
32個數,劃分爲 28個區域(比如
用單個文件代表一個區域),然後將數據分離到不同的區域,最後不同的區域再利用 bitmap 就可以直接解
決了。也就是說只要有足夠的磁盤空間,就可以很方便的解決。

2. 尋找中位數

5 億個 int 找它們的中位數。

分析:首先將 int 劃分爲 2^16個區域,然後讀取數據統計落到各個區域裏的數的個數,之後根據統計結
果就可以判斷中位數落到哪個區域,同時知道這個區域中的第幾大數剛好是中位數。然後第二次掃描我們
只統計落在這個區域中的那些數就可以了。
實際上,如果不是 int 是 int64,我們可以經過 3 次這樣的劃分即可降低到能夠接受的程度。即可以先
將 int64 分成 2^24個區域,確定區域的第幾大數,然後再將該區域分成 2^20個子區域,確定是子區域的第幾
大數,最後當子區域裏的數的個數只有 2^20個時,就可以直接利用直接尋址表 direct addr table 進行統計了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章