大數據小內存TOPK,排序問題。

大數據小內存TOPK,排序問題。

問題

10億個int數字,從小到大排序,或者得到TOP100,等問題。

解答

可以使用堆排序解決,小頂堆或者大頂堆。
從小到大排序,使用小頂堆,將所有數字按內存大小分段,內部排好序,從每一段中取出最小的數字,建立小頂堆,每次把堆定輸出到磁盤保存,再從堆定所在的段中取數字,重新建立小頂堆,最終完成排序。
對於排序問題,TOP100,維持一個有100個節點的小頂堆,每次讀入一個新數字,與堆定比較,如果比堆頂大,則拋棄堆定元素,重新建立大頂堆。

對於排序問題,可以用一個2^32的bit數組,每讀一個數,對應的位置上設置爲1,最後從小到大遍歷數組。

大數據去重

問題提出:

M(如10億)個int整數,只有其中N個數重複出現過,讀取到內存中並將重複的整數刪除。

解答

可以使用bitmap,將4字節的int值映射爲1字節的byte.

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