Heaps Carola Wenk 9/8/17 1 CMPS 2200 Introduction to Algorithms - - PowerPoint PPT Presentation

heaps
SMART_READER_LITE
LIVE PREVIEW

Heaps Carola Wenk 9/8/17 1 CMPS 2200 Introduction to Algorithms - - PowerPoint PPT Presentation

CMPS 2200 Fall 2017 Heaps Carola Wenk 9/8/17 1 CMPS 2200 Introduction to Algorithms Priority Queue A priority queue is a data structure which supports operations Insert Find_max Extract_max Several possible implementations:


slide-1
SLIDE 1

9/8/17 CMPS 2200 Introduction to Algorithms 1

CMPS 2200 – Fall 2017

Heaps

Carola Wenk

slide-2
SLIDE 2

9/8/17 CMPS 2200 Introduction to Algorithms 2

Priority Queue

A priority queue is a data structure which supports operations

  • Insert

Several possible implementations:

  • Find_max
  • Extract_max

Insert Find_max Extract_max Unsorted array: O(1) O(n) O(n) Sorted array: O(n) O(1) O(n) or O(1) Balanced BST: O(log n) O(log n) O(log n) Heaps: O(log n) O(1) O(log n) Fibonacci Heaps: O(1) O(1) O(log n)

amortized amortized amortized

slide-3
SLIDE 3

9/8/17 CMPS 2200 Introduction to Algorithms 3

Heaps

  • A max-heap is an almost complete binary tree (flushed

left on the last level). Each node stores a key. The tree fulfills the max-heap property: For every node x holds:

  • y x , for all y in any subtree of x

8 10 10 1 7 20 20 2 4 5 6

x  x  x

1) 2)

slide-4
SLIDE 4

9/8/17 CMPS 2200 Introduction to Algorithms 4

Heap Storage

  • Because a max-heap is an almost complete binary

tree it can be stored in an array level by level:

8 10 10 1 7 20 20 2 4 5 6

20 7 10 5 6 8 1 2 4

1 2 3 4 5 6 7 8 1 2 3 4 8 7 5 6

  • Implement child/parent “pointers”:
  • Find_max: O(1) time
slide-5
SLIDE 5

9/8/17 CMPS 2200 Introduction to Algorithms

Heap Height

  • Lemma: A complete binary tree of height

has

  • nodes.

Proof: Induction on .

2 7 3 15 1 3 1

  • Lemma: An almost complete binary tree

with nodes has height . Proof idea:

  • .
slide-6
SLIDE 6

9/8/17 CMPS 2200 Introduction to Algorithms 6

Insert, Heapify_up

Insert(A,n,key){ }

8 10 10 1 7 20 20 2 4 5 6

20 7 10 5 6 8 1 2 4

1 2 3 4 5 6 7 8 1 2 3 4 8 7 5 6

A:

Heapify_up(A,i){ while(i>0 && A[parent(i)]<A[i]){ swap(A[parent(i)],A[i]); i=parent(i); } }

9

9

9

9

8 10 10 1 7 20 20 2 4 5 9

1 2 3 4 8 7 5 6

6

9

8 10 10 1 9 20 20 2 4 5 7

1 2 3 4 8 7 5 6

6

9

: O(h)=O(log n)

=i =i i=

Insert 9

n=9 n=10

n++; A[n-1]=key; Heapify_up(A,n-1);

slide-7
SLIDE 7

9/8/17 CMPS 2200 Introduction to Algorithms 7

Extract_max, Heapify_down

Extract_max(A,n,key){ max=A[0]; A[0]=A[n-1]; n--; Heapify_down(A,n,0); return max; } Heapify_down(A,n,i){ }

8 10 10 1 9 20 20 2 4 5 7

20 9 10 5 7 8 1 2 4

1 2 3 4 5 6 7 8 1 2 3 4 8 7 5 6

A:

9

6

6

9

6 6

8 10 10 1 9 10 10 2 4 5 7

1 2 3 4 8 5 6

6

n=10 n=9

Extract_max

while(left(i)<n){//left child exists maxchild=left(i); if(right(i)<n && A[right(i)]>A[left(i)] maxchild =right(i); if(A[maxchild]<=A[i]) break; // done swap(A[i], A[maxchild]); i=maxchild; }

slide-8
SLIDE 8

9/8/17 CMPS 2200 Introduction to Algorithms 8

Extract_max, Heapify_down

Extract_max(A,n,key){ max=A[0]; A[0]=A[n-1]; n--; Heapify_down(A,n,0); return max; } Heapify_down(A,n,i){ }

8 10 10 1 9 20 20 2 4 5 7

20 9 10 5 7 8 1 2 4

1 2 3 4 5 6 7 8 1 2 3 4 8 7 5 6

A:

9

6

6

9

6 6

3 8 1 9 10 10 2 4 5 7

1 2 3 4 8 5 6

6

n=10 n=9

Extract_max

while(left(i)<n){//left child exists maxchild=left(i); if(right(i)<n && A[right(i)]>A[left(i)] maxchild =right(i); if(A[maxchild]<=A[i]) break; // done swap(A[i], A[maxchild]); i=maxchild; }

: O(log n)

slide-9
SLIDE 9

9/8/17 CMPS 2200 Introduction to Algorithms 9

Heapsort

Heapsort(A,n){ Build_heap(A); //Insert all elements for(i=n-1; i>=1; i--){ swap(A[0],A[i]); // moves max to A[n] n--; Heapify_down(A,n,0); } }

: O(n log n)

O(n log n) O(n log n)

  • Insert all numbers in a max-heap
  • Repeatedly extract max