海量資料排序
2011-04-12 19:33
1億資料找出最大的1w個
1. 分塊法
解法:a. 採用分塊法,將1億資料分成100w一塊,共100塊。
b. 對每塊進行快速排序,分成兩堆,如果大堆大於1w個,則對大堆再次進行快速排序,直到小於等於1w停止
(假設此時大堆有n個),此時對小堆進行排序,取最大的10000-n個,這樣就找到了這100w中最大的1w個。
c. 100塊,每塊選出最大的1w,再對這100w使用同樣的方法,找出最大的1w個
2. bit-map
適用範圍:可進行資料的快速查詢,判重,刪除,一般來說資料範圍是int的10倍以下
解法:用乙個例子來說明吧,這樣直觀一點。
假設對7, 6, 3, 5這四個數進行排序,首先初始化乙個byte,8位,可表示為0 0 0 0 0 0 0 0
對於7,將第七位置1,對剩下幾個數執行同樣操作,則最後該byte變為 0 0 1 0 1 1 1 0
最後一步,遍歷,將置1位的序號逐個輸出,即3,5, 6,7
3. 紅黑樹
解法:用乙個紅黑樹維護這1w個數,然後遍歷其他數字,來替換紅黑樹中最小的數(這是在網上看到的演算法,
我感覺用贏 者樹也是可以的)
如果資料中有重複,則對於bit-map,找出前1w個數,對這1w個數建立hash table,然後再次遍歷這一億個數,同時對hash table中的數字 計數,最後根據計數找出前1w個(包含重複)
海量資料排序
今天要給100億個數字排序,100億個 int 型數字放在檔案裡面大概有 37.2gb,非常大,記憶體一次裝不下了。那麼肯定是要拆分成小的檔案乙個乙個來處理,最終在合併成乙個排好序的大檔案。實現思路 1.把這個37gb的大檔案,用雜湊分成1000個小檔案,每個小檔案平均38mb左右 理想情況 把10...
海量資料排序演算法
題目 有100萬無序資料,要求從小到大排序。但是每次記憶體只能排序1萬條資料。1.因為每次只能處理1萬條資料,所以要分組處理,我們將100萬資料分成100組 2.因為每組資料都是無序的,所以我們使用平均時間複雜度較好的演算法。3.當我們分組排序完成後,我們要排序1萬條資料就會簡單很多了。我們一共要取...
海量資料處理 排序問題
乙個檔案中有9億條不重複的9位整數,對這個檔案中數字進行排序 針對這個問題,最容易想到的方法是將所有資料匯入到記憶體中,然後使用常規的排序方法,例如插入排序,快速排序,歸併排序等各種排序方法對資料進行排序,最後將排序好的資料存入檔案.但這些方法在此並不適用,由於資料量巨大,對32位機器而言,很難將這...