資料結構篇為本人考研時所寫筆記,包括知識點和程式設計思想兩大板塊,筆記內容依據王道資料結構考研書所寫,但比書本上知識更加生動形象,願本篇章能對您有所幫助
九、外部排序
- 基本概念:
① 基本概念:將待排序的記錄儲存在外存上,排序時再把資料一部分一部分地調入記憶體進行排序,在排序過程中需要多次進行記憶體和外存之間的交換
② 外部排序過程中的時間代價主要考慮訪問磁碟的次數,即IO次數
③ 為減少平衡歸併中外存讀寫次數所採取的方法:增大歸併路數和減少歸併段個數
(1) 利用。
(2) 由長度不等的歸併段,進行多路平衡歸併,需要構造最佳歸併樹
- 採用的歸併排序一般包括兩個獨立的階段:
① 根據記憶體緩衝區大小,將外存上的檔案分成若干長度為t的子檔案,依次讀入記憶體並利用內部排序方法對它們進行排序(例如在記憶體中進行2路歸併,歸併後的物件順序存放在輸出緩衝區中。若輸出緩衝區中物件存滿,則將其顧序寫到輸出歸併段(R1')中,再清空輸出緩衝區,繼續存放歸併後的物件。若某個輸入緩衝區中的物件取空,則從對應的輸入歸併段中再讀取下一塊,繼續參加歸併。如此繼續,直到兩個輸入歸併段中的物件全部讀入記憶體並都歸併完成為止),並將排序後得到的有序子檔案重新寫回外存,稱這些有序子檔案為歸併段或順串(輸入/輸出緩衝區沒有傳送使用者介面訊息的作用,但有產生初始歸併段工作區的作用)
② 對這些歸併段進行逐趟歸併,使歸併段(有序子檔案)逐漸由小到大,直至得到整個有序檔案為止
-
外部排序的總時間=內部排序所需的時間+外存資訊讀寫的時間(”主要矛盾“-優化的主要方向)+內部歸併所需的時間
-
優化:
① 多路平衡歸併
(1) 基本概念:
(1 最多隻能有k個段歸併為一個
(2 每一趟歸併中,若有m個歸併段參與歸併,則經過一趟處理得到向上取整(m/k)個新的歸併段
(3 建立總的I/O次數最少稱為最佳歸併書(類似於哈夫曼樹)
(2) 代價:
(1 需要增加相應的輸入緩衝區
(2 每次從k個歸併段中選一個最小元素需要(k-1)次關鍵字比較(利用敗者樹(類似於比賽選拔的那樣的完全二叉樹)增大歸併路數(並不是越大越好)從而減少比較次數)
② 減少初始歸併段數量r(可利用置換-選擇排序增大歸併段長度從而減少歸併段個數,其作用是用於生成外部排序的初始歸併段,不是對外部排序中輸入/歸併/輸出並行處理(因其不是一種完整的生成有序檔案的外部排序演算法))