資料結構篇_知識點板塊_第九章外部排序

Oten 發表於 2022-05-05
資料結構
  • 資料結構篇為本人考研時所寫筆記,包括知識點和程式設計思想兩大板塊,筆記內容依據王道資料結構考研書所寫,但比書本上知識更加生動形象,願本篇章能對您有所幫助

九、外部排序

  1. 基本概念:

① 基本概念:將待排序的記錄儲存在外存上,排序時再把資料一部分一部分地調入記憶體進行排序,在排序過程中需要多次進行記憶體和外存之間的交換

② 外部排序過程中的時間代價主要考慮訪問磁碟的次數,即IO次數

③ 為減少平衡歸併中外存讀寫次數所採取的方法:增大歸併路數和減少歸併段個數

(1) 利用。

(2) 由長度不等的歸併段,進行多路平衡歸併,需要構造最佳歸併樹

  1. 採用的歸併排序一般包括兩個獨立的階段:

① 根據記憶體緩衝區大小,將外存上的檔案分成若干長度為t的子檔案,依次讀入記憶體並利用內部排序方法對它們進行排序(例如在記憶體中進行2路歸併,歸併後的物件順序存放在輸出緩衝區中。若輸出緩衝區中物件存滿,則將其顧序寫到輸出歸併段(R1')中,再清空輸出緩衝區,繼續存放歸併後的物件。若某個輸入緩衝區中的物件取空,則從對應的輸入歸併段中再讀取下一塊,繼續參加歸併。如此繼續,直到兩個輸入歸併段中的物件全部讀入記憶體並都歸併完成為止),並將排序後得到的有序子檔案重新寫回外存,稱這些有序子檔案為歸併段或順串(輸入/輸出緩衝區沒有傳送使用者介面訊息的作用,但有產生初始歸併段工作區的作用)

② 對這些歸併段進行逐趟歸併,使歸併段(有序子檔案)逐漸由小到大,直至得到整個有序檔案為止

  1. 外部排序的總時間=內部排序所需的時間+外存資訊讀寫的時間(”主要矛盾“-優化的主要方向)+內部歸併所需的時間

  2. 優化:

① 多路平衡歸併

(1) 基本概念:

​ (1 最多隻能有k個段歸併為一個

​ (2 每一趟歸併中,若有m個歸併段參與歸併,則經過一趟處理得到向上取整(m/k)個新的歸併段

​ (3 建立總的I/O次數最少稱為最佳歸併書(類似於哈夫曼樹)

(2) 代價:

​ (1 需要增加相應的輸入緩衝區

​ (2 每次從k個歸併段中選一個最小元素需要(k-1)次關鍵字比較(利用敗者樹(類似於比賽選拔的那樣的完全二叉樹)增大歸併路數(並不是越大越好)從而減少比較次數)

② 減少初始歸併段數量r(可利用置換-選擇排序增大歸併段長度從而減少歸併段個數,其作用是用於生成外部排序的初始歸併段,不是對外部排序中輸入/歸併/輸出並行處理(因其不是一種完整的生成有序檔案的外部排序演算法))