Download presentation
Presentation is loading. Please wait.
Published byEarl Norton Modified over 9 years ago
1
The Binary Heap
2
Binary Heap Looks similar to a binary search tree BUT all the values stored in the subtree rooted at a node are greater than or equal to the value stored at the node. – In a min heap that is. – We will mainly talk about min heaps, but it’s the same concept.
3
Binary Heap What are they used for? – Priority Queue – Performing Heapsort
4
Binary Heap Priority Queue – A queue where you always extract the item with the highest priority next. – What operations do we need? An efficient deleteMin() and Insert() For our implementation we will achieve O(log n) time for the deleteMin() and Insert() operations.
5
Binary Heap Balanced binary tree – Can even store a binary heap in an array instead of an actual binary tree. – The children of node i are nodes 2i and 2i+1. Consider: Draw the tree What node is the parent of node i? – Floor(i/2) 102030405060708090100110120130 012345678910111213
6
Binary Tree 102030405060708090100110120130 012345678910111213 10 20 40 8090 100110 50 30 60 120130 70
7
Heap Operation : Insert Insert into the next open spot in the heap, or the next array location. – This will keep the heap balanced. However, in all likelihood this is not where the element belongs – Thus we have to do the Percolate Up procedure – For example, if you inserted 25 into the next open spot, it would be out of order.
8
Percolate Up If the parent of the new node is greater than the inserted value, swap them. – This is a single percolate up step. Continue this process until the inserted node’s parent stores a number lower than it. Since the height of the tree is O(lg n), this is an O(lg n) operation. What does this remind you of?
9
Insert Consider the tree we had before – Insert 65 Where do you insert it? 10 20 40 8090 100110 50 30 60 120130 25 70 Now what?
10
Insert Consider the tree we had before – Insert 65 Where do you insert it? 10 20 40 8090 100110 50 30 60 120130 25 70
11
Insert Consider the tree we had before – Insert 65 Where do you insert it? 10 20 40 8090 100110 50 30 60 120130 25 70
12
Insert Consider the tree we had before – Insert 65 Where do you insert it? 10 20 40 8090 100110 5060 120130 70 25 30
13
Heap Operation: deleteMin First part is easy – Just return the value stored in the root. Then what do we replace it with? – Place the “last” node in the vacated root. – Probably not the correct location. – Percolate Down
14
Percolate Down Compare the element to its children. – If one of the children is less than the node, swap the lowest. This is a single percolate down step. – CONTINUE until this “last” node has children with larger values than it. Real life example
15
Heap Operation: Heapify Heapify or Bottom-Up Heap Construction How to construct a heap out of unsorted elements. 1)Place all the unsorted elements in a complete binary tree. 2)Going through the nodes in backwards order, and skipping the leaf nodes, run Percolate Down on each of these nodes. Notice that each subtree below any node that has already run Percolate Down is already a heap. So after we run Percolate Down on the root, the whole tree is a heap.
16
Heapify Let’s run Heapify on the following elements: 801109030601204010501007020130 012345678910111213 80 110 30 1050 10070 60 90 120 20130 40 Where do we start? 120
17
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 110 30 1050 10070 60 90 130 40 120 20 Where do we look next? 60
18
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 110 30 1050 10070 60 90 130 40 20 Where do we look next? 120 30
19
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 110 50 10070 60 90 130 40 20 Where do we look next? 120 30 10 90
20
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 110 50 10070 60 20 130 40 120 30 1090
21
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 110 50 10070 60 20 130 40 120 30 1090 Where do we look next? 110
22
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 10 50 10070 60 20 130 40 120 30 1090110
23
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 10 50 10070 60 20 130 40 120 90 110 30
24
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 80 10 50 10070 60 20 130 40 120 90 110 30 Where do we look next? 80
25
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 10 80 50 10070 60 20 130 40 120 90 110 30
26
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 10 50 10070 60 20 130 40 120 90 110 80 30
27
Heapify Let’s run Heapify on the following elements: 801109030602040105010070120130 012345678910111213 10 10070 60 20 130 40 120 90 110 30 80 50
28
Heapify Why can we NOT go through the nodes in forward order? What’s the running time of the algorithm to create a heap? – In a heap with n nodes, we run Percolate Down on n/2 of those nodes. – The max number of steps of any Percolate Down is? O(log n) – Thus an upper bound for Make-Heap is O(n log n) We can do a more careful analysis for a tighter bound for the running time.
29
Make-Heap Analysis On the board.
30
Heap Sort Now that we know the basic operations to perform on a heap, we can use these to sort values using a heap. Basic Idea: 1)Insert all items into a heap 2)Extract the minimum items n times in a row storing the values sequentially in an array. What is the run time of Heap Sort? – Since each insert and extraction takes O(lg n) time. – This sort works in O(n lg n) time. Let’s do an example.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.