7 7 3 多路平衡歸併與敗者樹

2021-07-22 14:31:57 字數 568 閱讀 2593

歸併趟數s=[logm r](向下取整)。從而增加歸併路數m可以減少歸併趟數s,進而減少訪問外存的次數(i/o次數)。然而,當增加歸併路數m時,內部歸併時間將增加。做內部歸併時,在m個元素中選擇關鍵字最小的記錄需要比較m-1次。每趟歸併n個元素最多需要作(n-1)*(m-1)次比較,s趟歸併總共需要的比較次數為:

s*(n-1)*(m-1)=[logmr]*(n-1)*(m-1)=[log2r]

*(n-1)*(m-1)/[log2m]

其中的【log2r】*(n-1)在初始歸併段個數r於記錄個數n一定時是常數。而(m-1)/[log2m]隨m增長而增長,則內部歸併時間亦隨m的增長而增長。這將抵消由於增大m而減少外存訪問次數所得到的效益。因此不能使用普通的內部歸併排序演算法。

為了使內部歸併並不受m的增大的影響,引入了敗者樹。敗者樹是對樹形選擇排序的一種變形,可以看作一棵完全二叉樹。每個葉結點存放各歸併段在歸併過程中當前參加比較的記錄,內部結點用來記憶左右子樹中的「失敗者」,而讓勝者往上繼續比較,一直到根結點。如果比較兩個數,大的為失敗者,小的為勝利者,則根結點指向的樹為最小數。

因此m路歸併的敗者樹深度為【log2m】,因此m個記錄中選

敗者樹與外部多路歸併排序

在處理大資料量的排序時,由於資料無法全部載入到記憶體,內部排序無法對整個資料集進行排序,需要到外部排序。外部排序有一些特點,跟記憶體容量和讀寫檔案有關 1.讀寫檔案,需要考慮 io 時間 2.從無序到逐步有序的過程中,需要多個中間檔案外部排序有多種,常見的歸併排序的如下 輸入為大檔案 f 排序過程分...

敗者樹多路排序

定義 敗者樹是乙個完全二叉樹,非葉子節點記錄失敗者。那麼相對於勝者樹,具有訪存小的優勢。勝者樹勝者拿走後,整條通路 從葉子到根 所有記錄的勝者資訊失效,那麼新加入節點需要從葉子一直遍歷到根,有可能每次都要寫入 更新新的勝者 而敗者樹,新加入的節點可以利用整條路徑的敗者資訊。敗者樹構建 構建過程 初始...

實現多路平衡歸併演算法

對於外部排序演算法來說,直接影響演算法效率的因素為讀寫外存的次數,即次數越多,演算法效率越低。若想提高演算法的效率,即減少演算法執行過程中讀寫外存的次數,可以增加 k 路平衡歸併中的 k 值。經過計算得知,如果毫無限度地增加 k 值,雖然會減少讀寫外存資料的次數,但會增加內部歸併的時間,得不償失。對...