2.8.11 - Leftest Heap
合併2個Priority Queue(Heap)成一個Priority Queue時間複雜度為O(logn),比Heap的O(n)較快。
1. 定義
x為extended binary tree的ㄧ節點。
shortest(x): x到任一外部節點的最短路徑
Leftest Tree: 每一個內部節點的shortest(左子點) ≥ shortest(右子點)
Leftest Heap: 是一個Leftest Tree且父點 ≤ 子點
圖示:
2. 運作
2.1 Merge(H1, H2)
比較H1與H2的root大小,找出最小的root作為新的root
(假設H1的root較小),H1的root作為新的root,且H1的左子樹保留成新的root的左子樹
Merge(H1右子樹, H2),直到變成一棵min tree(子>父)
檢查是否符合leftest heap性質(shortest(x的左子點)>shortest(x的右子點)),作違反則左右交換node。
2.2 Delete x in a leftest heap
將min從root取出,得到兩個子樹H1, H2
Merge(H1, H2)
2.3 Insert x in a leftest tree
x視為H2
Merge(H1, H2)
Last updated