730 likes | 1.99k Views
Leftist Heaps. Text Read Weiss, § 23.1 (Skew Heaps) Leftist Heap Definition of null path length Definition of leftist heap Building a Leftist Heap Sequence of inserts Re-heapification if leftist heap property is violated. Motivation.
E N D
Leftist Heaps • Text • Read Weiss, §23.1 (Skew Heaps) • Leftist Heap • Definition of null path length • Definition of leftist heap • Building a Leftist Heap • Sequence of inserts • Re-heapification if leftist heap property is violated
Motivation • A binary heap provides O(log n) inserts and O(log n) deletes but suffers from O(n log n) merges • A leftist heap offers O(log n) inserts and O(log n) deletes and O(log n) merges • Note, however, leftist heap inserts and deletes are more expensive than Binary Heap inserts and deletes
Definition A Leftist (min)Heap is a binary tree that satisfies the follow-ing conditions. If X is a node and L and R are its left and right children, then: • X.value ≤ L.value • X.value ≤ R.value • null path length of L ≥ null path length of R where the null path length of a node is the shortest distance between from that node to a descendant with 0 or 1 child. If a node is null, its null path length is −1.
Example: Null Path Length 4 8 19 12 27 20 15 25 43 node 4 8 19 12 15 25 27 20 43 npl 1 0 1 1 0 0 0 0 0
Example: Null Path Length 4 8 19 0 1 What is the npl of the right child of 8? 12 1 27 20 0 0 What are the npl’s of the children of 20 and the right child of 27? 15 25 43 0 0 0 node 4 8 19 12 15 25 27 20 43 npl 1 0 1 1 0 0 0 0 0
Example: Null Path Length • node 4 violates leftist heap property fix by swapping children 4 8 19 0 1 12 1 27 20 0 0 15 25 43 0 0 0 node 4 8 19 12 15 25 27 20 43 npl 1 0 1 1 0 0 0 0 0
8 19 0 1 12 1 27 20 0 0 15 25 43 0 0 0 Leftist Heap 4 node 4 8 19 12 15 25 27 20 43 npl 1 0 1 1 0 0 0 0 0
Merging Leftist Heaps Consider two leftist heaps … 4 6 8 19 8 7 12 14 27 20 15 25 43 Task: merge them into a single leftist heap
Merging Leftist Heaps 4 6 8 19 8 7 12 14 27 20 15 25 43 First, instantiate a Stack
Merging Leftist Heaps x y 4 6 8 19 8 7 12 14 27 20 15 25 43 Compare root nodes merge(x,y)
Merging Leftist Heaps x y 4 4 6 8 19 8 7 12 14 27 20 15 25 43 Remember smaller value
Merging Leftist Heaps y 4 x 4 6 8 19 8 7 12 14 27 20 15 25 43 Repeat the process with the right child of the smaller value
Merging Leftist Heaps y 6 4 x 4 6 8 19 8 7 12 14 27 20 15 25 43 Remember smaller value
Merging Leftist Heaps 6 4 x 4 6 y 8 19 8 7 12 14 27 20 15 25 43 Repeat the process with the right child of the smaller value
Merging Leftist Heaps 7 6 4 x 4 6 y 8 19 8 7 12 14 27 20 15 25 43 Remember smaller value
Merging Leftist Heaps 7 6 4 x 4 6 8 19 8 7 y 12 14 27 20 null 15 25 43 Repeat the process with the right child of the smaller value
Merging Leftist Heaps 7 6 4 x 4 6 8 19 8 7 12 14 27 20 15 25 43 8 Because one of the arguments is null, return the other argument
Merging Leftist Heaps 7 6 4 4 6 x Refers to node 8 19 8 7 8 14 27 20 12 43 8 15 25 Make 8 the right child of 7
Merging Leftist Heaps 7 6 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 8 15 25 Make 7 leftist (by swapping children)
Merging Leftist Heaps 6 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 15 25 7 Return node 7
Merging Leftist Heaps 6 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 15 25 7 Make 7 the right child of 6 (which it already is)
Merging Leftist Heaps 6 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 15 25 7 Make 6 leftist (it already is)
Merging Leftist Heaps 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 15 25 6 Return node 6
Merging Leftist Heaps 4 4 6 19 8 7 27 20 8 14 43 12 15 25 6 Make 6 the right child of 4
Merging Leftist Heaps 4 4 6 19 8 7 27 20 8 14 43 12 15 25 6 Make 4 leftist (it already is)
Final Leftist Heap 4 6 19 8 7 27 20 8 14 43 12 15 25 • Verify that the tree is heap • Verify that the heap is leftist 4 Return node 4
Analysis • Height of a leftist heap ≈ O(log n) • Maximum number of values stored in Stack ≈ 2 * O(log n) ≈ O(log n) • Total cost of merge ≈ O(log n)
Inserts and Deletes • To insert a node into a leftist heap, merge the leftist heap with the node • After deleting root X from a leftist heap, merge its left and right subheaps • In summary, there is only one operation, a merge.
Skew Heaps • Text • Read Weiss, §6.7 • Skew Heap • No need for null path length • Definition of skew heap • Building a Skew Heap • Sequence of inserts • Swap children at every merge step
Motivation • Simplify leftist heap by • not maintaining null path lengths • swapping children at every merge step
Definition A Skew (min)Heap is a binary tree that satisfies the follow-ing conditions. If X is a node and L and R are its left and right children, then: • X.value ≤ L.value • X.value ≤ R.value A Skew (max)Heap is a binary tree that satisfies the follow-ing conditions. If X is a node and L and R are its left and right children, then: • X.value ≥ L.value • X.value ≥ R.value
Merging Skew Heaps Consider two skew heaps … 4 6 8 19 8 7 12 14 27 20 15 25 43 Task: merge them into a single skew heap
Merging Skew Heaps 4 6 8 19 8 7 12 14 27 20 15 25 43 First, instantiate a Stack
Merging Skew Heaps x y 4 6 8 19 8 7 12 14 27 20 15 25 43 Compare root nodes merge(x,y)
Merging Skew Heaps x y 4 4 6 8 19 8 7 12 14 27 20 15 25 43 Remember smaller value
Merging Skew Heaps y 4 x 4 6 8 19 8 7 12 14 27 20 15 25 43 Repeat the process with the right child of the smaller value
Merging Skew Heaps y 6 4 x 4 6 8 19 8 7 12 14 27 20 15 25 43 Remember smaller value
Merging Skew Heaps 6 4 x 4 6 y 8 19 8 7 12 14 27 20 15 25 43 Repeat the process with the right child of the smaller value
Merging Skew Heaps 7 6 4 x 4 6 y 8 19 8 7 12 14 27 20 15 25 43 Remember smaller value
Merging Skew Heaps 7 6 4 x 4 6 8 19 8 7 y 12 14 27 20 null 15 25 43 Repeat the process with the right child of the smaller value
Merging Skew Heaps 7 6 4 x 4 6 8 19 8 7 12 14 27 20 15 25 43 8 Because one of the arguments is null, return the other argument
Merging Skew Heaps 7 6 4 4 6 x Refers to node 8 19 8 7 8 14 27 20 12 43 8 15 25 Make 8 the right child of 7
Merging Skew Heaps 7 6 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 8 15 25 Swap children of node 7
Merging Skew Heaps 6 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 15 25 7 Return node 7
Merging Skew Heaps 6 4 4 6 Refers to node 8 19 8 7 8 14 27 20 12 43 15 25 7 Make 7 the right child of 6 (which it already is)
Merging Skew Heaps 6 4 4 6 Refers to node 8 7 19 8 8 14 27 20 12 43 15 25 7 Swap children of node 6
Merging Skew Heaps 4 4 6 Refers to node 8 7 19 8 8 14 27 20 12 43 15 25 6 Return node 6
Merging Skew Heaps 4 4 6 19 7 8 27 20 8 14 43 12 15 25 6 Make 6 the right child of 4
Merging Skew Heaps 4 4 19 6 7 27 20 8 8 43 14 12 15 25 6 Swap children of node 4
Final Skew Heap 4 19 6 7 27 20 8 8 43 14 12 15 25 • Verify that the tree is heap • Verify that the heap is skew 4 Return node 4