csc263 winter 2020 priority queues - university of toronto263/jessica/lecture2.pdf ·...

72
Priority Queues Week 2 1 CSC263 Winter 2020 CSC263 | Jessica Burgner-Kahrs

Upload: others

Post on 21-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Priority QueuesWeek 2

1

CSC263 Winter 2020

CSC263 | Jessica Burgner-Kahrs

Page 2: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Announcements

Probability Worksheet (ungraded)

Assignment 1 out à Due Jan 27

Make Groups on MarkUs

https://mcs.utm.utoronto.ca/~263

2CSC263 | Jessica Burgner-Kahrs

Page 3: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Today

ADT Priority Queue

Data structure HeapUse it to implement priority queues...Also useful for other things, e.g. sorting

3CSC263 | Jessica Burgner-Kahrs

Page 4: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

QueueA collection of elements

Supported operations❏ Enqueue(Q, x)❏ Dequeue(Q)❏ PeekFront(Q)

An ADT We already Know

4

First come first serve

CSC263 | Jessica Burgner-Kahrs

Page 5: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Max-Priority QueueA collection of elements with priorities, i.e., each element x has x.priority

Supported operations❏ Insert(Q, x)

❏ like Enqueue(Q, x)❏ ExtractMax(Q)

❏ like Dequeue(Q)❏ Max(Q)

❏ like PeekFront(Q)❏ IncreasePriority(Q, x, k)

❏ increase x.priority to k

A New ADT

5CSC263 | Jessica Burgner-Kahrs

Oldest person first

33 18 25 40 24 75

Page 6: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Applications of Priority Queues

Job scheduling in an operating system

§ Processes have different priorities (Normal, high...)

Bandwidth management in a router

§ Delay sensitive traffic has higher priority

Several graph algorithms

§ Find minimum spanning tree of a graph, find shortest path

6CSC263 | Jessica Burgner-Kahrs

Page 7: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Now, let’s implement ADT (Max)-Priority Queue

7CSC263 | Jessica Burgner-Kahrs

Page 8: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Use an unsorted linked list

Insert(Q,x) # x is a node§ Just insert x at the head, which takes Θ(1)

IncreasePriority(Q,x,k)§ Just change x.priority to k, which takes Θ(1)

Max(Q)§ Have to go through the whole list, takes Θ(n)

ExtractMax(Q)§ Go through the whole list to find x with max priority (Θ(n)), then delete it

(O(1) if double linked) and return it, so overall Θ(n).8CSC263 | Jessica Burgner-Kahrs

40 -> 33 -> 18 -> 75 -> 24 -> 25

Page 9: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Use a linked list sorted in reverseMax(Q)

§ Just return the head of the list, Θ(1)

ExtractMax(Q)§ Just delete and return the head, Θ(1)

Insert(Q,x)§ Linearly search the correct location of insertion which takes Θ(n) in worst

case.

IncreasePriority(Q,x,k)§ After increase, need to move element to a new location in the list, takes

Θ(n) in worst case.9CSC263 | Jessica Burgner-Kahrs

75 -> 40 -> 33 -> 25 -> 24 -> 18

Page 10: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

10CSC263 | Jessica Burgner-Kahrs

Θ(1) is good, but Θ(n) is bad...

unsorted linked list sorted linked list...Can we link these elements in a smarterway, so that we never need to do Θ(n)?

unsorted list sorted list

Insert(Q,x) Θ(1) Θ(n)Max(Q) Θ(n) Θ(1)ExtractMax(Q) Θ(n) Θ(1)IncreasePriority(Q,x,k) Θ(1) Θ(n)

Page 11: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Yes, we can!

11CSC263 | Jessica Burgner-Kahrs

HeapΘ(log n)

Θ(1)Θ(log n)Θ(log n)

Worst case running times

Some operations are worse, from Θ(1) to Θ(log n), but that’s a small price to pay for avoiding Θ(n) costs

unsorted list sorted list

Insert(Q,x) Θ(1) Θ(n)Max(Q) Θ(n) Θ(1)ExtractMax(Q) Θ(n) Θ(1)IncreasePriority(Q,x,k) Θ(1) Θ(n)

Page 12: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Binary Max-Heap

12CSC263 | Jessica Burgner-Kahrs

A binary max-heap is a

nearly-complete binary

tree that has the

max-heap property.

75

2540

182433

Page 13: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

It’s a binary tree

Each node has at most 2 children

13CSC263 | Jessica Burgner-Kahrs

Page 14: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

It’s a nearly-complete binary tree

Each level is completely filled, except maybe the bottom level where nodes are filled to as far left as possible

14CSC263 | Jessica Burgner-Kahrs

Page 15: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Why is it important to be a nearly-complete binary tree?

Because then we can store the tree in an array, and each node knows which index has its parent or left/right child.

15CSC263 | Jessica Burgner-Kahrs

A

CB

FED

A B C D E F

Left(i) = 2i

Right(i) = 2i + 1 (if exists)

Parent(i) = floor(i/2)

Assume index starts at 1

index: 1 2 3 4 5 6

Page 16: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Why is it important to be a nearly-complete binary tree?

Another reason:

The height of a complete binary tree with n nodes is Θ(log n).

16CSC263 | Jessica Burgner-Kahrs

This is essentially why those operations would have Θ(log n) worst-case running time.

Page 17: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Binary Max-Heap

17CSC263 | Jessica Burgner-Kahrs

A binary max-heap is a

nearly-complete binary

tree that has the

max-heap property.

75

2540

182433

Page 18: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

The max-heap Property

Every node has a key (priority) greater than or equal to keys of its immediate children.

18CSC263 | Jessica Burgner-Kahrs

75

40 25

75

2540

182431 20

12 33

75

2540

182433 20

12 31

Page 19: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

The max-heap Property

Every node has key (priority) greater than or equal to keys of its immediate children.

19CSC263 | Jessica Burgner-Kahrs

75

40 25

75

2540

182433 20

12 31

Implication: every node is larger than or equal to all its descendants, i.e., every subtree of a heap is also a heap.

Page 20: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

20CSC263 | Jessica Burgner-Kahrs

We have a binary max-heap defined,now let’s do operations on it.§ Max(Q)§ Insert(Q,x)§ ExtractMax(Q)§ IncreasePriority(Q,x,k)

Page 21: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Max(Q)Return the largest key in Q,

in O(1) time

21CSC263 | Jessica Burgner-Kahrs

Page 22: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Max(Q)Return the maximum element

22CSC263 | Jessica Burgner-Kahrs

75

2540

182433

75 40 25 33 24 18QReturn the root of the heap, i.e.,

just return Q[1]

(index starts from 1)

worst case Θ(1)

Page 23: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Insert(Q, x)Insert node x into heap Q,

in O(logn) time

23CSC263 | Jessica Burgner-Kahrs

Page 24: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Insert(Q,x)Insert a node to a heap

First thing to note:

Which spot to add the new node?

The only spot that keeps it a nearly complete binary tree.

24CSC263 | Jessica Burgner-Kahrs

Increment heap size

Page 25: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Insert(Q,x)Insert a node to a heap

Second thing to note:Heap property might be broken, how to fix it and maintain the heap property?

“Bubble-up” the new node to a proper position, by swapping with parent.

25CSC263 | Jessica Burgner-Kahrs

75

2540

182433 20

12 31 42

swap

Page 26: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Insert(Q,x)Insert a node to a heap

Second thing to note:Heap property might be broken, how to fix it and maintain the heap property.

“Bubble-up” the new node to a proper position, by swapping with parent.

26CSC263 | Jessica Burgner-Kahrs

75

2540

184233 20

12 31 24

swap

Page 27: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Insert(Q,x)Insert a node to a heap

Second thing to note:Heap property might be broken, how to fix it and maintain the heap property.

“Bubble-up” the new node to a proper position, by swapping with parent.

27CSC263 | Jessica Burgner-Kahrs

75

2542

184033 20

12 31 24

Worst-case Θ(height) = Θ(log n)

Page 28: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q)Delete and return the largest key in Q,

in O(logn) time

28CSC263 | Jessica Burgner-Kahrs

Page 29: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q)Delete and return the maximum element

First thing to note:Which spot to remove?The root?

29CSC263 | Jessica Burgner-Kahrs

NO!Will break into 2 heaps!

Page 30: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q)Delete and return the maximum element

First thing to note:Which spot to remove?

30CSC263 | Jessica Burgner-Kahrs

The only spot that keeps it a nearly complete binary tree.

Decrement heap size

Page 31: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q)Delete and return the maximum element

First thing to note:

Which spot to remove?The only spot that keeps it a nearly complete binary tree.

31CSC263 | Jessica Burgner-Kahrs

75

3840

183332 20

12 31

65 40 28 32 33 18 20 12 31

Decrement heap size

But the last guy’s key should NOT be deleted.

THIS guy’s key (root) should be deleted.

Overwrite root with the last guy’s key, then delete the last guy (decrement heap size).

Page 32: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q)Delete and return the maximum element

Now the heap property is broken again…, need to fix it.

“Bubble-down” by swapping with a child

32CSC263 | Jessica Burgner-Kahrs

31

3840

183332 20

12

Page 33: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Which child to swap with?

so that, after the swap, max-heap property is satisfied

33CSC263 | Jessica Burgner-Kahrs

3840

31

The “elder” child!because it is the largest among the three

3831

40

Page 34: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q): Delete and return the maximum element

Now the heap property is broken again…, need to fix it.

“Bubble-down” by swapping withthe elder child

34CSC263 | Jessica Burgner-Kahrs

31

3840

183332 20

12

swap

Page 35: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q): Delete and return the maximum element

Now the heap property is broken again…, need to fix it.

“Bubble-down” by swapping with...the elder child

35CSC263 | Jessica Burgner-Kahrs

40

3831

183332 20

12

swap

Page 36: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

ExtractMax(Q): Delete and return the maximum element

Now the heap property is broken again…, need to fix it.

“Bubble-down” by swapping withthe elder child

36CSC263 | Jessica Burgner-Kahrs

40

3833

183132 20

12

Worst case running time: Θ(height) + some constant workΘ(log n)

Page 37: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Quick Summary

Insert(Q, x)➔Bubble-up, swapping with parent

ExtractMax(Q)➔Bubble-down, swapping elder child

37CSC263 | Jessica Burgner-Kahrs

Bubble up/down is also called percolate up/down, or sift up down, or trickle up/down,

or heapify up/down, or cascade up/down.

Page 38: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

IncreasePriority(Q, x, k)Increases the key of node x to k,

in O(logn) time

38CSC263 | Jessica Burgner-Kahrs

Page 39: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

IncreasePriority(Q, x, k)Increase the key of node x to k

Just increase the key, then...

Bubble-up by swapping with parents, to proper location.

39CSC263 | Jessica Burgner-Kahrs

75

3840

183332 20

12 31

Increase this guy to 80

80

Page 40: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

IncreasePriority(Q, x, k)Increase the key of node x to k

Just increase the key, then...

Bubble-up by swapping with parents, to proper location.

40CSC263 | Jessica Burgner-Kahrs

65

3875

183340 20

12 32

80

Worst case running time: Θ(height) + some constant workΘ(log n)

Page 41: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Now we have learned how implement a priority queue using a heap➔ Max(Q)➔ Insert(Q, x)➔ ExtractMax(Q)➔ IncreasePriority(Q, x, k)

Next➔How to use heap for sorting➔How to build a heap from an unsorted array

41CSC263 | Jessica Burgner-Kahrs

Page 42: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

42CSC263 | Jessica Burgner-Kahrs

5 min

Page 43: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

HeapSortSorts an array, in O(n logn) time

43CSC263 | Jessica Burgner-Kahrs

Page 44: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

The Idea

How to get a sorted list out of a heap with n nodes?

Keep extracting max for n times, the keys extracted will be sorted in non-ascending order.

44CSC263 | Jessica Burgner-Kahrs

75

2540

241833

Worst-case running time: each ExtractMax is O(log n), we do it n times, so overall it’s...

O(n log n)

Page 45: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Now let’s be more precise

What’s needed: modify a max-heap-ordered array into a sorted array

45CSC263 | Jessica Burgner-Kahrs

75

2540

241833

75 40 25 33 18 24

18 24 25 33 40 75

We want to do this “in-place” without using any extra array space, i.e., just by swapping things around.

Before:

After:

Page 46: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

75 40 25 33 18 24

24 40 25 33 18 75

24 40 25 33 18 75

This node is like deleted from the heap, not touched any more.40 33 25 24 18 75

Repeat Step 1-3 until the array is fully sorted (at most n iterations).

18 33 25 24 40 75

33 24 25 18 40 75

25 24 18 33 40 75

Step 1: swap first (75) and last (24), since the tail is where 75 (max) belongs to.

Step 2: decrement heap size

24 18 25 33 40 75

18 24 25 33 40 75

Step 3: fix the heap by bubbling down 24

18 24 25 33 40 75

Valid heaps are green rectangled 46CSC263 | Jessica Burgner-Kahrs

Page 47: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

HeapSort - The Pseudo-code

47CSC263 | Jessica Burgner-Kahrs

HeapSort(A)‘’’sort any array A into non-descending order ’’’

for i ← A.size downto 2:swap A[1] and A[i] # Step 1: swap the first and the last

A.size ← A.size - 1 # Step 2: decrement size of heap

BubbleDown(A, 1) # Step 3: bubble down the 1st element in A

Does it work?It ONLY works for an array A that is initially heap-ordered, it does NOT work for any array!

BuildMaxHeap(A) # convert any array A into a heap-ordered one

Missing!

Page 48: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

BuildMaxHeap(A)Converts an array into a max-heap ordered array,

in O(n) time

48CSC263 | Jessica Burgner-Kahrs

Page 49: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Convert any Array into a Heap Ordered One

49CSC263 | Jessica Burgner-Kahrs

65 40 25 33 18 2418 33 25 65 24 40

any array heap ordered array

In other words...

18

2533

402465

65

2540

241833

Page 50: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #1

50CSC263 | Jessica Burgner-Kahrs

BuildMaxHeap(A):

B ← empty array # empty heapfor x in A:

Insert(B, x) # heap insertA ← B # overwrite A with B

Running time: Each Insert takes O(log n), there are n inserts...so it’s O(n log n), not very exciting.Not in-place, needs a second array.

Page 51: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

a better idea for BuildMaxHeap

51CSC263 | Jessica Burgner-Kahrs

Page 52: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Key Observation

52CSC263 | Jessica Burgner-Kahrs

If this is a valid heap

and this is also a valid heap

only the root is out of heap-order

To make the whole thing a valid heap, all you need to do is …bubbling-down the root.

Page 53: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

53CSC263 | Jessica Burgner-Kahrs

23

4533

514431 20

65 37 18 12 70 49 28 29

Fix heap order, from bottom up.

Page 54: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

54CSC263 | Jessica Burgner-Kahrs

23

4533

514431 20

65 37 18 12 70 49 28 29

Adjust heap order, from bottom up.

NOT a heap only because root is out of order, so fix it by bubble-down the root

Page 55: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

55CSC263 | Jessica Burgner-Kahrs

23

4533

514431 29

65 37 18 12 70 49 28 20

Adjust heap order, from bottom up.

NOT a heap only because root is out of order, so fix it by bubble-down the root

Page 56: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

56CSC263 | Jessica Burgner-Kahrs

23

4533

704431 29

65 37 18 12 51 49 28 20

Adjust heap order, from bottom up.

Page 57: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

57CSC263 | Jessica Burgner-Kahrs

23

4533

704431 29

65 37 18 12 51 49 28 20

Adjust heap order, from bottom up.

NOT a heap only because root is out of order, so fix it by bubble-down the root

Page 58: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

58CSC263 | Jessica Burgner-Kahrs

23

4533

704465 29

31 37 18 12 51 49 28 20

Adjust heap order, from bottom up.NOT a heap only because root is out of order, so fix it by bubble-down the root

already a fixed heap, not to worry about!

Page 59: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

59CSC263 | Jessica Burgner-Kahrs

23

7033

514465 29

31 37 18 12 45 49 28 20

Adjust heap order, from bottom up.NOT a heap only because root is out of order, so fix it by bubble-down the root

Page 60: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

60CSC263 | Jessica Burgner-Kahrs

23

7065

514437 29

31 33 18 12 45 49 28 20

Adjust heap order, from bottom up.

NOT a heap only because root is out of order, so fix it by bubble-down the root

Page 61: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2

61CSC263 | Jessica Burgner-Kahrs

70

5165

494437 29

31 33 18 12 45 23 28 20

Adjust heap order, from bottom up.

Heap Built!We did nothing but bubbling-down

Page 62: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2: The starting index

62CSC263 | Jessica Burgner-Kahrs

70

5165

494437 29

31 33 18 12 45 23 28 20

1

2 3

4 5 6 7

8 9 10 11 12 13 14 15

We started here, where the index is floor(n/2)

Page 63: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2: The starting index

63CSC263 | Jessica Burgner-Kahrs

70

5165

494437 29

31 33 18 12 45 23

1

2 3

4 5 6 7

8 9 10 11 12 13

Even the bottom level is not fully filled, we still start from floor(n/2)

We always start from floor(n/2), and go down to 1.

Page 64: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Idea #2: Pseudo-code!

64CSC263 | Jessica Burgner-Kahrs

BuildMaxHeap(A):

for i ← floor(n/2) downto 1:BubbleDown(A, i)

➔ It’s in-place, no need for extra array (we did nothing but bubble-down, which is basically swappings).

➔ How about runtime?§ Each bubble down is O(log n)§ we do it roughly n/2 times§ so overall it is O(n log n), … Right?

Page 65: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

AnalysisWorst-case running time of

BuildMaxHeap(A)

65CSC263 | Jessica Burgner-Kahrs

Page 66: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Intuition

66CSC263 | Jessica Burgner-Kahrs

A complete binary tree with n nodes...

~ n/2 nodes, and no work done at this level.

~ n/4 nodes

# of swaps per bubble-down: ≤1

n/8 nodes, and # of swaps per bubble-down: ≤2

n/16 nodes, and # of swaps per bubble-down: ≤3

How many levels? ~ log n

Page 67: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

So, total number of swaps

67CSC263 | Jessica Burgner-Kahrs

=1 same trick as Week 1’s sum

Page 68: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

The Power of Analysis

68CSC263 | Jessica Burgner-Kahrs

This 2-line simple algorithm for BuildMaxHeap, which is easier to implement than the insert-n-times algorithm, by analysis, can be proven to be an order of magnitude faster (O(n) instead of O(n logn)).

One can never design such an elegant algorithm without the ability to perform analysis.

BuildMaxHeap(A):

for i ← floor(n/2) downto 1:BubbleDown(A, i)

Page 69: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

BuildMaxHeap: my second favouritealgorithm in CLRS.

--Larry Zhang

69CSC263 | Jessica Burgner-Kahrs

Page 70: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Summary

HeapSort(A) ➔ Sort an unsorted array in-place

➔ O(n log n) worst-case running time

BuildMaxHeap(A)➔ Convert an unsorted array into a heap, in-place

➔ Fix heap property from bottom up, do bubbling down on each sub-root

➔ O(n) worst-case running time

70CSC263 | Jessica Burgner-Kahrs

Page 71: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Algorithm visualizer

71CSC263 | Jessica Burgner-Kahrs

https://visualgo.net/en/heap

Page 72: CSC263 Winter 2020 Priority Queues - University of Toronto263/jessica/lecture2.pdf · 2020-01-17 · CSC263 | Jessica Burgner-Kahrs 31 75 40 38 32 33 18 20 12 31 65 40 28 32 33 18

Today we learned➔ ADT: Priority Queue

➔ Heap: a data structure for implementing priority queue efficiently.

➔ How to sort with heap

➔ How to build a heap, elegantly.

Next week➔ ADT: Dictionary

➔ Data structure: Binary Search Tree

72CSC263 | Jessica Burgner-Kahrs