海量數據排序

海量數據排序
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個(包含重複)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章