500 likes | 605 Views
Problem of the Day. You are trapped alone in a dark room with: Candle; Wood stove ; and Gas lamp (with full tank). You only have one match; what do you light 1 st ?. Problem of the Day. You are trapped alone in a dark room with: Candle; Wood stove ; and Gas lamp (with full tank).
E N D
Problem of the Day • You are trapped alone in a dark room with: • Candle; • Wood stove; and • Gas lamp (with full tank). • You only have one match; what do you light 1st?
Problem of the Day • You are trapped alone in a dark room with: • Candle; • Wood stove; and • Gas lamp (with full tank). • You only have one match; what do you light 1st?
Problem of the Day • You are trapped alone in a dark room with: • Candle; • Wood stove; and • Gas lamp (with full tank). • You only have one match; what do you light 1st?
Problem of the Day • You are trapped alone in a dark room with: • Candle; • Wood stove; and • Gas lamp (with full tank). • You only have one match; what do you light 1st? The match!
CSC 212 – Data Structures Lecture 39:Complete Binary Trees & Heaps
Priority Queue ADT • Prioritizes Entrysusing their keys • ForEntrys with equal priorities, ordernot specified • Priority given to each value when added to PQ • Normally, the priority not changeable while in PQ • Access single Entry: one with the lowest priority • Returns Entryusing min()or removeMin() • Location are imaginary – only smallest matters
Heaps • Binary-tree based PQimplementation • Still structured using parent-child relationship • At most 2 children & 1 parent for each node in tree • Heaps must also satisfy 2 additional properties • Parent at least as important as its children • Structure must form a complete binary tree 2 5 9 7 6
D C B A Picturing Linked BinaryTree B A C D
CompleteBinaryTree • ADT which extends BinaryTree • Add & remove methods defined plus those inherited • For this ADT, trees must maintain specific shape • Fill lowest level first, then can start new level below it Legal Illegal 2 2 5 9 5 9 6 7 6 7
CompleteBinaryTree • ADT which extends BinaryTree • Add & remove methods defined plus those inherited • For this ADT, trees must maintain specific shape • Fill lowest level first, then can start new level below it • Lowest level must be filled in from left-to-right Legal Illegal 2 2 5 9 5 9 7 6 7 6
What Is Purpose of a Heap? • Root has critical Entrythat we always access • Entryat root always has smallest priority in Heap • O(1) access time in min() without any real effort • CompleteBinaryTreemakes insert()easy • Create leftmost child on lowest level • When a level completes, start next one • Useful when:
Upheap • Insertion may violate heap-order property • Upheap immediately after adding new Entry • Goes from new node to restore heap’s order • Compare priority of node & its parent • If out of order, swap node's Entrys • Continue upheapingfrom parent node • Stop only when either case occurs: • Found properly ordered node & parent • Binary tree's root is reached
insert() in a Heap 2 5 6 9 7
insert() in a Heap 2 5 6 9 7 1
Start your upheaping! 2 5 6 9 7 1
Start your upheaping! 2 5 6 9 7 1
Start your upheaping! 2 5 1 9 7 6
Upheaping Must Continue 2 5 1 9 7 6
Upheaping Must Continue 2 5 1 9 7 6
Upheaping Sounds Icky 1 5 2 9 7 6
Check If We Should Continue 1 5 2 9 7 6
Stop At The Root 1 5 2 9 7 6
insert() Once Again 1 5 2 9 7 6 3
Upheaping Begins Anew 1 5 2 9 7 6 3
Maintain Heap Order Property 1 5 2 9 7 6 3
We Are Done With This Upheap! 1 5 2 9 7 6 3
Removing From a Heap • removeMin()must kill Entry at heap’s root • For a complete tree, must remove last node added • How to reconcile these two different demands? • Removed node's Entry moved to the root • Then remove node from the complete tree • Heap's order preserved by going down
Removing From a Heap • removeMin()must kill Entry at heap’s root • For a complete tree, must remove last node added • How to reconcile these two different demands? • Removed node's Entry moved to the root • Then remove node from the complete tree • Heap's order preserved by going down Censored
Downheap • Restores heap’s order during removeMin() • Downheap work starts at root • Swap with smallest child, if at least out-of-order • Downheapingcontinues with old smallest child • Stop at leaf or when node is legal
Before removeMin() is called 1 2 5 7 9
Move Last Entry Up To Root 1 2 5 7 9
Move Last EntryUp To Root 1 2 5 7 9
Move Last EntryUp To Root 9 2 5 7
Compare Parent W/Smaller Child 9 2 5 7
Compare Parent W/Smaller Child 9 2 5 7
Compare Parent W/Smaller Child 2 9 5 7
Continue Downheaping W/Node 2 9 5 7
Continue Downheaping W/Node 2 9 5 7
Swap If Out Of Order 2 7 5 9
Check If We Should Continue 2 7 5 9
Stop When We Reach a Leaf 2 7 5 9
Implementation Excuses • upheap & downheaptravel height of tree • O(logn) running time for each of these • Serves as bound for adding & removing from PQ • What drawbacks does heap have? • PriorityQueue can be faster using Sequence • Only for specific mix of operations, however • PriorityQueueusing heaps are fastest overall
Sequence-based BinaryTree • Node at index specified for location in Tree • Root node stored at index 0 • Root’s left child at index 1 • Right child of root at index 2 • Left child’s right child at index 4 • Right child’s left child at index 5 • Node at index n’s left child is at index 2n + 1 • Node at index n’s right child is at index 2n + 2
Sequence-based BinaryTree • Node at index specified for location in Tree • Root node stored at index 0 • Root’s left child at index 1 • Right child of root at index 2 • Left child’s right child at index 4 • Right child’s left child at index 5 • Node at index n’s left child is at index 2n + 1 • Node at index n’s right child is at index 2n + 2 But how much space will this need for to hold a heap?
Sequence to Implement Heap 2 2 0 0
Sequence to Implement Heap 2 9 2 0 1 9 0 1
Sequence to Implement Heap 2 9 3 2 0 1 9 2 3 ` 0 1 2
Sequence to Implement Heap 9 1 0 2 2 99 3 99 3 9 2 3 ` 0 1 2 3
Sequence to Implement Heap 2 9 3 2 0 99 9 2 3 3 99 1 Add nodes to end of the Sequence Similarly, remove node at end NO space is wasted for this! ` 0 1 2 3
Heaps • Binary-tree based PQimplementation • Still structured using parent-child relationship • At most 2 children & 1 parent for each node in tree • Heaps must also satisfy 2 additional properties • Parent at least as important as its children • Can not use any tree; must form complete binary tree 2 5 9 7 6