雙層桶劃分學習筆記
關於我的 Leetcode 題目解答,程式碼前往 Github:https://github.com/chenxiangcyr/leetcode-answers
適用範圍:求第 k 大,中位數,不重複或重複的數字,且元素範圍很大,不能一次載入記憶體。
基本原理:通過多次劃分,逐步確定範圍,然後最後在一個可以接受的範圍內進行。
問題1:在2.5億個整數中找出不重複的整數的個數。假設記憶體不足以同時容納2.5億個整數。
-
方案1:
整數個數為 2^32,也就是,我們可以將這 2^32 個數,劃分為 2^8 個區域(比如2^8 個檔案),然後將資料分離到不同的區域,然後不同的區域在利用 bitmap 就可以直接解決了。 -
方案2:
採用 2-bitmap,每個數分別 2 個bit,00 表示出現 0 次,01 表示出現 1 次,11 表示出現多次。
需要記憶體2.5 億 * 2 = 5億 bit = 0.5G bit = 0.07G byte = 70M
。
依次掃描2.5億個整數:- 00 變 01
- 01 變 11
- 10 不變
問題2:在5億個整數中找出中位數。
- 方案1:將這些數字劃分到 2^16 個區域,依次統計每個區域內元素的個數,根據統計結果,判斷出中位數位於哪個區域。隨後在重新掃描該區域。
相關文章
- hive學習筆記之五:分桶Hive筆記
- 分數規劃學習筆記筆記
- 「分數規劃」學習筆記及做題記錄筆記
- 差分學習筆記筆記
- 分塊學習筆記筆記
- Redux 進階 – react 全家桶學習筆記(二)ReduxReact筆記
- Redux 進階 - react 全家桶學習筆記(二)ReduxReact筆記
- Redux 基礎 - react 全家桶學習筆記(一)ReduxReact筆記
- go學習筆記劃重點Go筆記
- javaScript 學習計劃以及筆記JavaScript筆記
- 動態規劃學習筆記動態規劃筆記
- 點分樹學習筆記筆記
- 數字遊戲策劃學習筆記遊戲筆記
- 第5輪學習筆記規劃筆記
- 樹鏈剖分學習筆記筆記
- wqs二分學習筆記筆記
- 「學習筆記」樹鏈剖分筆記
- Solr學習筆記(三):分詞Solr筆記分詞
- jieba分詞學習筆記(三)Jieba分詞筆記
- 差分約束學習筆記筆記
- 學習筆記:數論分塊筆記
- 分塊莫隊學習筆記筆記
- [PyTorch 學習筆記] 3.2 卷積層PyTorch筆記卷積
- mysql學習筆記-底層原理詳解MySql筆記
- 線性規劃對偶學習筆記筆記
- 360星計劃學習筆記-如何學好JavaScript筆記JavaScript
- Django學習筆記(12)——分頁功能Django筆記
- (MySQL學習筆記)分頁查詢MySql筆記
- Irwin-Hall 分佈學習筆記筆記
- 整體二分學習筆記筆記
- LVGL雙向連結串列學習筆記筆記
- CAD學習筆記基礎課【圖層】筆記
- Linux 學習筆記--任務計劃 crontabLinux筆記
- MATLAB學習筆記:數值積分Matlab筆記
- [學習筆記] 樹上差分 - 圖論筆記圖論
- React學習筆記之雙向資料繫結React筆記
- 學習筆記:客戶端物件層次(一):BOM筆記客戶端物件
- 層模式——面向模式體系結構學習筆記模式筆記