Lecture 5/13: Heaps


May 13, 2020

đź“‚Associated files

Binary Heaps

CS 106B: Programming Abstractions

Spring 2020, Stanford University Computer Science Department

Lecturers: Chris Gregg and Julie Zelenski

A heap of candy sprinkles


Slide 2

Announcements


Slide 3

Today's Goals:


Slide 4

Binary Heaps


Slide 5

Binary Heaps


Slide 6

Which of the following are min-heaps?

          5
        /   \ 
      10      8     
     /  \    /  \
   12   85  14  13 
  /  \
22   11 
         13 
        /   \ 
      19     36     
     /  \    /  \
   24   99  46  42 
  /  \
25   26 

Slide 7

Binary Heaps


Slide 8

How do you store a heap?

values: ? 5 10 8 12 11 14 13 22 43 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11

Slide 9

Heap Operations


Slide 10

Heap operations: peek()

                       5
                 /            \ 
               10               8     
            /      \         /      \
          12        11      14       13 
         /  \      /  \    /  \     /   \
        22   43   __  __  __  __   __   __
values: ? 5 10 8 12 11 14 13 22 43 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11

Slide 11

Heap operations: enqueue(e)

                       5
                 /            \ 
               10               8     
            /      \         /      \
          12        11      14       13 
         /  \      /  \    /  \     /   \
        22   43   __  __  __  __   __   __
values: ? 5 10 8 12 11 14 13 22 43 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11

Slide 12

Heap operations: dequeue()


Slide 13

Priority Queues


Slide 14

Priority queue functions


Slide 15

Priority Queue Example

Operation Output Priority Queue
enqueue(5,A) - {(5,A)}
enqueue(9,C) - {(5,A),(9,C)}
enqueue(3,B) - {(5,A),(9,C),(3,B)}
enqueue(7,D) - {(5,A),(9,C),(3,B),(7,D)}
peek() B {(5,A),(9,C),(3,B),(7,D)}
peekPriority() 3 {(5,A),(9,C),(3,B),(7,D)}
dequeue() B {(5,A),(9,C),(7,D)}
size() 3 {(5,A),(9,C),(7,D)}
peek() A {(5,A),(9,C),(7,D)}
dequeue() A {(9,C),(7,D)}
dequeue() D {(9,C)}
dequeue() C {}
dequeue() error! {}
isEmpty() TRUE {}

Slide 16

Building a heap from scratch

                  14 
             /            \ 
            9              13     
        /      \         /      \
      43       10       8       11 
     /  \      /  \    /  \     /   \
    22   12   __  __  __  __   __   __
values: ? 14 9 13 43 10 8 11 22 12 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11
                  14 
             /            \ 
            9              13     
        /      \         /      \
      12       10       8       11 
     /  \      /  \    /  \     /   \
    22   43   __  __  __  __   __   __
values: ? 14 9 13 12 10 8 11 22 43 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11
                  14 
             /            \ 
            9               8     
        /      \         /      \
      12       10       13       11 
     /  \      /  \    /  \     /   \
    22   43   __  __  __  __   __   __
values: ? 14 9 8 12 10 13 11 22 43 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11
                   8 
             /            \ 
            9               14     
        /      \         /      \
      12       10       13       11 
     /  \      /  \    /  \     /   \
    22   43   __  __  __  __   __   __
values: ? 8 9 14 12 10 13 11 22 43 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11
                   8 
             /            \ 
            9               11     
        /      \         /      \
      12       10       13       14 
     /  \      /  \    /  \     /   \
    22   43   __  __  __  __   __   __
values: ? 8 9 11 12 10 13 14 22 43 ? ?
index:  0   1   2   3   4   5   6   7   8   9   10  11