敗者樹
多路平衡歸並帶來的問題
外部排序時間開銷=讀寫外存的時間+內部排序所需時間+內部歸並所需 時間
\[歸並趟數S=\lceil log_kr \rceil ,歸並路數k增加,歸並趟數S減少,讀寫磁盤總次數減少 \]
使用k路平衡歸並策略,選出一個最小元素需要對比關鍵字(k-1)次, 導致內部歸並所需時間增加
8路平衡歸並,從八個歸並段中選出一個最小元素需要對比關鍵字7次
可用“敗者樹”進行優化
什么是“敗者樹”
敗者樹的構造
敗者樹——可視為一棵完全二叉樹(多了一個頭頭)。k個葉節點分別是當前參加比較的元素,非葉子結點用來記憶左右子樹中的”失敗者“,而讓優勝者往上繼續進行比較,一直到根節點。
敗者樹的使用
敗者樹在多路平衡歸並中的應用
對於k路歸並,第一次構造敗者樹需要對比關鍵字k-1次
有了敗者樹,選出最小元素,只需要對比關鍵字
\[\lceil log_2k \rceil 次 \]