外部排序中多路歸併排序,採用敗者樹較優的原因
在外部排序中,多路歸併排序採用敗者樹的優點主要有以下原因:
多路歸併排序過程
多路歸併是指對\(r\)個初始歸併段,做\(k\)路平衡歸併
過程如下:
- 每趟歸併時,對\(k\)個已有序歸併段進行歸併
- 第\(i\)個歸併段最小值為\(X_i\),每次取\(X_j=\min\{X_1,X_2,...,X_k\}\),並新增到序列\(Q\)的尾部
- 刪去原\(X_j\),\(X_j\)更新為第\(j\)個歸併段下一個最小值,以此類推直至所有歸併段內的元素都被新增至\(Q\)中
需求和約束
- 需要動態地維護\(k\)個元素的最小值\(A\)
- 每次刪去最小值\(A\),並新增元素\(B\),保證\(B \geq A\)
最小敗者樹(Min Loser Tree)使用要求
- 每次僅支援修改最小值
勝者樹與敗者樹比較
- 敗者樹中最小值節點修改後向上更新父節點僅需訪問1個節點:父節點
- 勝者樹中最小值節點修改後向上更新父節點需要訪問2個節點:父節點,兄弟節點
證明比勝者樹更優
設被修改節點原值為\(X\),新值為\(X'\),兄弟節點值為\(Y\),父節點值為\(F\),需要得到父節點新值\(F'\)
- 敗者樹中:從最小值向上到根節點的路徑上,\(F=Y\)恆成立,故每次僅需訪問父節點,得到\(F'=\min(X',F)\),並更新其值
- 勝者樹中:從最小值向上到根節點的路徑上,\(F=X\)恆成立,故每次需要訪問兄弟節點,得到\(F'=\min(X',Y)\),並訪問父節點以更新其值