外部排序中多路歸併排序,採用敗者樹比勝者樹更優的原因和簡易證明

Tiachi發表於2024-03-14

外部排序中多路歸併排序,採用敗者樹較優的原因

在外部排序中,多路歸併排序採用敗者樹的優點主要有以下原因:

多路歸併排序過程

多路歸併是指對\(r\)個初始歸併段,做\(k\)路平衡歸併
過程如下:

  • 每趟歸併時,對\(k\)個已有序歸併段進行歸併
  • \(i\)個歸併段最小值為\(X_i\),每次取\(X_j=\min\{X_1,X_2,...,X_k\}\),並新增到序列\(Q\)的尾部
  • 刪去原\(X_j\)\(X_j\)更新為第\(j\)個歸併段下一個最小值,以此類推直至所有歸併段內的元素都被新增至\(Q\)

需求和約束

  1. 需要動態地維護\(k\)個元素的最小值\(A\)
  2. 每次刪去最小值\(A\),並新增元素\(B\),保證\(B \geq A\)

最小敗者樹(Min Loser Tree)使用要求

  1. 每次僅支援修改最小值

勝者樹與敗者樹比較

  • 敗者樹中最小值節點修改後向上更新父節點僅需訪問1個節點:父節點
  • 勝者樹中最小值節點修改後向上更新父節點需要訪問2個節點:父節點,兄弟節點

證明比勝者樹更優

設被修改節點原值為\(X\),新值為\(X'\),兄弟節點值為\(Y\),父節點值為\(F\),需要得到父節點新值\(F'\)

  • 敗者樹中:從最小值向上到根節點的路徑上,\(F=Y\)恆成立,故每次僅需訪問父節點,得到\(F'=\min(X',F)\),並更新其值
  • 勝者樹中:從最小值向上到根節點的路徑上,\(F=X\)恆成立,故每次需要訪問兄弟節點,得到\(F'=\min(X',Y)\),並訪問父節點以更新其值

相關文章