名人博客閱讀摘要三:外部排序

6. 外部排序

6.1 如何給10^7個數據量的磁盤文件排序

(1)位圖方案。熟悉位圖的朋友可能會想到用位圖來表示這個文件集合。例如正如編程珠璣一書上所述,用一個20位長的字符串來表示一個所有元素都小於20的簡單的非負整數集合,邊框用如下字符串來表示集合{1,2,3,5,8,13}:0 1 1 1 0 1 0 0 1 0 0 0 0 1 0 0 00 0 0

上述集合中各數對應的位置則置1,沒有對應的數的位置則置0。

(2)多路歸併外部排序方案。

1、內存排序。由於要求的可用內存爲1MB,那麼每次可以在內存中對250K的數據進行排序,然後將有序的數寫入硬盤。那麼10M的數據需要循環40次,最終產生40個有序的文件。

2、歸併排序。將每個文件最開始的數讀入(由於有序,所以爲該文件最小數),存放在一個大小爲40的first_data數組中;選擇first_data數組中最小的數min_data,及其對應的文件索引index;將first_data數組中最小的數寫入文件result,然後更新數組first_data(根據index讀取該文件下一個數代替min_data);判斷是否所有數據都讀取完畢,否則返回2。

所以,本程序按順序分兩步,第一步、Memory Sort,第二步、MergeSort。程序的流程圖,如下圖所示。


                                               

 

 

 

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