ch15 heap

57
Chapter 15 Heaps

Upload: leminhvuong

Post on 06-May-2015

1.886 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Ch15 Heap

Chapter 15

Heaps

Page 2: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-2

Chapter Objectives

• Define a heap abstract data structure

• Demonstrate how a heap can be used to solve problems

• Examine various heap impmentations

• Compare heap implementations

Page 3: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-3

Heaps

• A heap is a binary tree with two added properties:– It is a complete tree

– For each node, the node is less than or equal to both the left child and the right child

• This definition described a minheap

Page 4: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-4

Heaps

• In addition to the operations inherited from a binary tree, a heap has the following additional operations:– addElement

– removeMin

– findMin

Page 5: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-5

FIGURE 15.1 The operations on a heap

Page 6: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-6

Listing 15.1

Page 7: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-7

FIGURE 15.2 UML description of the HeapADT

Page 8: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-8

The addElement Operation

• The addElement method adds a given element to the appropriate location in the heap

• A binary tree is considered complete if all of the leaves are level h or h-1 where h = log2n and n is the number of elements in the tree

Page 9: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-9

The addElement Operation

• Since a heap is a complete tree, there is only one correct location for the insertion of a new node– Either the next open position from the left

at level h

– Or the first position in level h+1 if level h is full

Page 10: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-10

The addElement Operation

• Once we have located the new node in the proper position, then we must account for the ordering property

• We simply compare the new node to its parent value and swap the values if necessary

• We continue this process up the tree until either the new value is greater than its parent or the new value becomes the root of the heap

Page 11: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-11

FIGURE 15.3 Two minheaps containing the same data

Page 12: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-12

FIGURE 15.4 Insertion points for a heap

Page 13: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-13

FIGURE 15.5 Insertion and reordering in a heap

Page 14: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-14

The removeMin Operation

• The removeMin method removes the minimum element from the heap

• The minimum element is always stored at the root

• Thus we have to return the root element and replace it with another element

Page 15: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-15

The removeMin Operation

• The replacement element is always the last leaf

• The last leaf is always the last element at level h

Page 16: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-16

FIGURE 15.6 Examples of the last leaf in a heap

Page 17: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-17

The removeMin Operation

• Once the element stored in the last leaf has been moved to the root, the heap will have to reordered

• This is accomplished by comparing the new root element to the smaller of its children and the swapping them if necessary

• This process is repeated down the tree until the element is either in a leaf or is less than both of its children

Page 18: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-18

FIGURE 15.7 Removal and reordering in a heap

Page 19: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-19

Using Heaps: Heap Sort

• Given the ordering property of a heap, it is natural to think of using a heap to sort a list of objects

• One approach would be to simply add all of the objects to a heap and then remove them one at a time in ascending order

Page 20: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-20

Using Heaps: Heap Sort• Insertion into a heap is O(log n) for any

given node and thus would O(n log n) for n nodes to build the heap

• However, it is also possible to build a heap in place using an array

• Since we know the relative position of each parent and its children in the array, we simply start with the first non-leaf node in the array, compare it to its children and swap if necessary

Page 21: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-21

Using Heaps: Heap Sort

• However, it is also possible to build a heap in place using an array

• Since we know the relative position of each parent and its children in the array, we simply start with the first non-leaf node in the array, compare it to its children and swap if necessary

Page 22: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-22

Using Heaps: Heap Sort

• We then work backward in the array until we reach the root

• Since at most, this will require us to make two comparisons for each non-leaf node, this approach is O(n) to build the heap

• We will revisit the analysis of HeapSort at the end of the chapter

Page 23: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-23

Using Heaps: Priority Queue

• A priority queue is a collection that follows two ordering rules:– Items which have higher priority go first

– Items with the same priority use a first in, first out method to determine their ordering

• A priority queue could be implemented using a list of queues where each queue represents items of a given priority

Page 24: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-24

Using Heaps: Priority Queue

• Another solution is to use a minheap

• Sorting the heap by priority accomplishes the first ordering

• However, the first in, first out ordering for items with the same priority has to be manipulated

Page 25: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-25

Using Heaps: Priority Queue

• The solution is to create a PriorityQueueNode object that stores the element to be placed on the queue, the priority of the element and the arrival order of the element

• Then we simply define a compareTo method for the PriorityQueueNode class that first compares priority then arrival time

• The PriorityQueue class then extends the Heap class and stores PriorityQueueNodes

Page 26: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-26

Listing 15.2

Page 27: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-27

Listing 15.2 (cont.)

Page 28: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-28

Listing 15.2 (cont.)

Page 29: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-29

Listing 15.2 (cont.)

Page 30: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-30

Listing 15.3

Page 31: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-31

Listing 15.3 (cont.)

Page 32: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-32

Listing 15.3 (cont.)

Page 33: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-33

Implementing Heaps with Links

• A linked implementation of a minheap would simply be an extension of our LinkedBinaryTree class

• However, since we need each node to have a parent pointer, we will create a HeapNode class to extend our BinaryTreeNode class we used earlier

Page 34: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-34

Listing 15.4

Page 35: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-35

Implementing Heaps with Links

• The addElement method must accomplish three tasks:– Add the new node at the appropriate

location

– Reorder the heap

– Reset the lastNode pointer to point to the new last node

Page 36: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-36

LinkedHeap - the addElement Operation

Page 37: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-37

LinkedHeap - the addElement Operation

Page 38: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-38

LinkedHeap - the addElement Operation

• The addElement operation makes use of two private methods:– getNextParentAdd that returns a

reference to the node that will be the parent of the new node

– heapifyAdd that reorders the heap after the insertion

Page 39: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-39

LinkedHeap - the addElement Operation

Page 40: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-40

LinkedHeap - the addElement Operation

Page 41: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-41

LinkedHeap - the removeMin Operation

• The removeMin operation must accomplish three tasks:– Replace the element stored in the root

with the element stored in the last leaf

– Reorder the heap if necessary

– Return the original root element

Page 42: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-42

LinkedHeap - the removeMin Operation

Page 43: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-43

LinkedHeap - the removeMin Operation

Page 44: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-44

LinkedHeap - the removeMin Operation

• Like the addElement operation, the removeMin operation makes use of two private methods– getNewLastNode that returns a reference

to the new last node in the heap

– heapifyRemove that reorders the heap after the removal

Page 45: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-45

LinkedHeap - the removeMin Operation

Page 46: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-46

LinkedHeap - the removeMin Operation

Page 47: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-47

LinkedHeap - the removeMin Operation

Page 48: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-48

Implementing Heaps with Arrays

• An array implementation of a heap may provide a simpler alternative

• In an array implementation, the location of parent and child can always be calculated

• Given that the root is in postion 0, then for any given node stored in position n of the array, its left child is in position 2n + 1 and its right child is in position 2(n+1)

• This means that its parent is in position (n-1)/2

Page 49: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-49

Implementing Heaps with Arrays

• Like the linked version, the addElement operation for an array implementation of a heap must accomplish three tasks:– Add the new node,

– Reorder the heap,

– Increment the count by one

• The ArrayHeap version of this method only requires one private method, heapifyAdd which reorders the heap after the insertion

Page 50: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-50

ArrayHeap - the addElement Operation

Page 51: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-51

ArrayHeap - the addElement Operation

Page 52: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-52

ArrayHeap - the removeMin Operation

• The removeMin operation must accomplish three tasks:– Replace the element stored at the root with the

element stored in the last leaf

– Reorder the heap as necessary

– Return the original root element

• Like the addElement operation, the removeMin operation makes use of a private method, heapifyRemove to reorder the heap

Page 53: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-53

ArrayHeap - the removeMin Operation

Page 54: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-54

ArrayHeap - the removeMin Operation

Page 55: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-55

ArrayHeap - the removeMin Operation

Page 56: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-56

Analysis of Heap Implementations

• The addElement operation is O(log n) for both implementations

• The removeMin operation is O(log n) for both implementations

• The findMin operation is O(1) for both implementations

Page 57: Ch15 Heap

Copyright © 2005 Pearson Addison-Wesley. All rights reserved. 15-57

Analysis of Heap Implementations

• One might conclude then that HeapSort is O(log n) since both adding and removing elements is O(log n)

• Keep in mind that for HeapSort, we must perform both operations for each of n elements

• Thus the time complexity of HeapSort is 2*n*log n or O(n log n)