合併2個Priority Queue(Heap)成一個Priority Queue時間複雜度為O(logn),比Heap的O(n)較快。
x為extended binary tree的ㄧ節點。
shortest(x): x到任一外部節點的最短路徑
shortest(x)={0x is an external node1+min{shortest(x的左子點)shortest(x的左子點)x is an internal oddshortest(x)= \begin{cases} 0 & x \text{ is an external node}\\ 1+\min \begin{cases} shortest(x的左子點) &\\ shortest(x的左子點) &\\ \end{cases} & x \text{ is an internal odd} \end{cases}shortest(x)=⎩⎨⎧01+min{shortest(x的左子點)shortest(x的左子點)x is an external nodex is an internal odd
Leftest Tree: 每一個內部節點的shortest(左子點) ≥ shortest(右子點)
Leftest Heap: 是一個Leftest Tree且父點 ≤ 子點
圖示:
比較H1與H2的root大小,找出最小的root作為新的root
(假設H1的root較小),H1的root作為新的root,且H1的左子樹保留成新的root的左子樹
Merge(H1右子樹, H2),直到變成一棵min tree(子>父)
檢查是否符合leftest heap性質(shortest(x的左子點)>shortest(x的右子點)),作違反則左右交換node。
將min從root取出,得到兩個子樹H1, H2
Merge(H1, H2)
x視為H2
Last updated 7 years ago