Heaps and Heapsort 1 October 2020 OSU CSE 1 Heaps A heap is a - - PowerPoint PPT Presentation

heaps and heapsort
SMART_READER_LITE
LIVE PREVIEW

Heaps and Heapsort 1 October 2020 OSU CSE 1 Heaps A heap is a - - PowerPoint PPT Presentation

Heaps and Heapsort 1 October 2020 OSU CSE 1 Heaps A heap is a binary tree of T that satisfies two properties: Global shape property: it is a complete binary tree Local ordering property: the label in each node is smaller than


slide-1
SLIDE 1

Heaps and Heapsort

1 October 2020 OSU CSE 1

slide-2
SLIDE 2

Heaps

  • A heap is a binary tree of T that

satisfies two properties:

– Global shape property: it is a complete binary tree – Local ordering property: the label in each node is “smaller than or equal to” the label in each of its child nodes

1 October 2020 OSU CSE 2

slide-3
SLIDE 3

Heaps

  • A heap is a binary tree of T that

satisfies two properties:

– Global shape property: it is a complete binary tree – Local ordering property: the label in each node is “smaller than or equal to” the label in each of its child nodes

1 October 2020 OSU CSE 3

A complete binary tree is one in which all levels are “full” except possibly the bottom level, with any nodes on the bottom level as far left as possible.

slide-4
SLIDE 4

Heaps

  • A heap is a binary tree of T that

satisfies two properties:

– Global shape property: it is a complete binary tree – Local ordering property: the label in each node is “smaller than or equal to” the label in each of its child nodes

1 October 2020 OSU CSE 4

Also in the picture is (as with BSTs, sorting, etc.) a total preorder that makes this notion precise.

slide-5
SLIDE 5

Simplification

  • For simplicity in the following illustrations,

we use only one kind of example:

– T = integer – The ordering is ≤

  • Because heaps are used in sorting, where

duplicate values may be involved, we allow that multiple nodes in a heap may have the same labels (i.e., we will not assume that the labels are unique)

1 October 2020 OSU CSE 5

slide-6
SLIDE 6

The Big Picture

1 October 2020 OSU CSE 6

x

slide-7
SLIDE 7

The Big Picture

1 October 2020 OSU CSE 7

y x

This tree’s root label y satisfies x ≤ y

slide-8
SLIDE 8

The Big Picture

1 October 2020 OSU CSE 8

y x

Observe: This tree is also a heap; and for each node in this tree with label z, we have: x ≤ y ≤ z.

slide-9
SLIDE 9

The Big Picture

1 October 2020 OSU CSE 9

y x

This tree’s root label y satisfies x ≤ y

slide-10
SLIDE 10

The Big Picture

1 October 2020 OSU CSE 10

y x

Observe: This tree is also a heap; and for each node in this tree with label z, we have: x ≤ y ≤ z.

slide-11
SLIDE 11

Examples of Heaps

1 October 2020 OSU CSE 11

5 2 1 8 7 8 2 1 1 8

slide-12
SLIDE 12

Non-Examples of Heaps

1 October 2020 OSU CSE 12

8 1 2 1 5 1 2 8 2 1 1 5

slide-13
SLIDE 13

Non-Examples of Heaps

1 October 2020 OSU CSE 13

8 1 2 1 5 1 2 8 2 1 1 5

Shape property is violated here: not all nodes at the bottom level are as far left as possible.

slide-14
SLIDE 14

Non-Examples of Heaps

1 October 2020 OSU CSE 14

8 1 2 1 5 1 2 8 2 1 1 5

Ordering property is violated here: value is out of order with that of its right child.

slide-15
SLIDE 15

Non-Examples of Heaps

1 October 2020 OSU CSE 15

8 1 2 1 5 1 2 8 2 1 1 5

Shape property is violated: two levels are not “full”.

slide-16
SLIDE 16

Heapsort

  • A heap can be used to represent the

values in a SortingMachine, as follows:

– In changeToExtractionMode, arrange all the values into a heap – In removeFirst, remove the root, and adjust the slightly mutilated heap to make it a heap again

1 October 2020 OSU CSE 16

slide-17
SLIDE 17

Heapsort

  • A heap can be used to represent the

values in a SortingMachine, as follows:

– In changeToExtractionMode, arrange all the values into a heap – In removeFirst, remove the root, and adjust the slightly mutilated heap to make it a heap again

1 October 2020 OSU CSE 17

Why should this work?

slide-18
SLIDE 18

How removeFirst Can Work

  • If the root is the only node in the heap,

then after removing it, what remains is already a heap; nothing left to do

  • If the root is not the only node, then

removing it leaves an “opening” that must be filled by moving some other value in the heap into the opening

1 October 2020 OSU CSE 18

slide-19
SLIDE 19

How removeFirst Can Work

  • If the root is the only node in the heap,

then after removing it, what remains is already a heap; nothing left to do

  • If the root is not the only node, then

removing it leaves an “opening” that must be filled by moving some other value in the heap into the opening

1 October 2020 OSU CSE 19

The question is: which one?

slide-20
SLIDE 20

Example: A First Attempt

1 October 2020 OSU CSE 20

4 3 2 1 5

slide-21
SLIDE 21

Example: A First Attempt

1 October 2020 OSU CSE 21

4 3 2 5

If we remove the root, leaving this

  • pening ...
slide-22
SLIDE 22

Example: A First Attempt

1 October 2020 OSU CSE 22

4 3 5

... we might move up the smaller child ...

2

slide-23
SLIDE 23

Example: A First Attempt

1 October 2020 OSU CSE 23

4 3 5

... now creating another opening ...

2

slide-24
SLIDE 24

Example: A First Attempt

1 October 2020 OSU CSE 24

4 5

... so, we might move up the smaller child.

2 3

slide-25
SLIDE 25

Example: A First Attempt

1 October 2020 OSU CSE 25

4 5

Is the result necessarily a heap?

2 3

slide-26
SLIDE 26

Example: A Second Attempt

1 October 2020 OSU CSE 26

4 3 2 1 5

slide-27
SLIDE 27

Example: A Second Attempt

1 October 2020 OSU CSE 27

4 3 2 5

This time, let’s maintain the shape property ...

slide-28
SLIDE 28

Example: A Second Attempt

1 October 2020 OSU CSE 28

4 2 5

... by promoting the last node on the bottom level.

3

slide-29
SLIDE 29

Example: A Second Attempt

1 October 2020 OSU CSE 29

4 2 5

Now, we can “sift down” the root into its proper place ...

3

slide-30
SLIDE 30

Example: A Second Attempt

1 October 2020 OSU CSE 30

4 3 5

... by swapping it with its smaller child ...

2

slide-31
SLIDE 31

Example: A Second Attempt

1 October 2020 OSU CSE 31

4 3 5 2

... and then “sifting down” the root of that subtree.

slide-32
SLIDE 32

Example: A Second Attempt

1 October 2020 OSU CSE 32

4 3 5 2

Is the result necessarily a heap?

slide-33
SLIDE 33

Pseudo-Contract

/** * Restores a complete binary tree to be a heap * if only the root might be out of place. * @updates t * @requires * [t is a complete binary tree] and * [both subtrees of the root of t are heaps] * @ensures * [t is a heap with the same values as #t] */ public static void siftDown (BinaryTree<T> t) {...}

1 October 2020 OSU CSE 33

slide-34
SLIDE 34

Building a Heap In the First Place

  • Suppose we have n values in a complete

binary tree, but they are arranged without regard to the heap ordering

  • How can we “heapify” it?

1 October 2020 OSU CSE 34

slide-35
SLIDE 35

Pseudo-Contract

/** * Makes a complete binary tree into a heap. * @updates t * @requires * [t is a complete binary tree] * @ensures * [t is a heap with the same values as #t] */ public static void heapify (BinaryTree<T> t) {...}

1 October 2020 OSU CSE 35

slide-36
SLIDE 36

Hint

  • To see how you might implement

heapify, compare the contracts of siftDown and heapify

  • The only difference: before we can call

siftDown to make a heap, both subtrees

  • f the root must already be heaps

– Once they are heaps, just a call to siftDown will finish the job

1 October 2020 OSU CSE 36

slide-37
SLIDE 37

Hint

  • To see how you might implement

heapify, compare the contracts of siftDown and heapify

  • The only difference: before we can call

siftDown to make a heap, both subtrees

  • f the root must already be heaps

– Once they are heaps, just a call to siftDown will finish the job

1 October 2020 OSU CSE 37

How do we make the subtrees into heaps?

slide-38
SLIDE 38

Example

1 October 2020 OSU CSE 38

1 4 5 3 2

slide-39
SLIDE 39

Example

1 October 2020 OSU CSE 39

5 4 1 3 2

First, recursively “heapify” the left subtree.

slide-40
SLIDE 40

Example

1 October 2020 OSU CSE 40

5 4 1 3 2

Then, recursively “heapify” the right subtree.

slide-41
SLIDE 41

Example

1 October 2020 OSU CSE 41

5 4 1 3 2

Then “sift down” the root, because now

  • nly the root might

be out of place.

slide-42
SLIDE 42

Embedding a Heap in an array

  • While one could represent a heap using a

BinaryTree<T> (as suggested in the pseudo-contracts above), it is generally not done this way

  • Instead, a heap is usually represented

“compactly” using an array of T

1 October 2020 OSU CSE 42

slide-43
SLIDE 43

Interpreting an array as a Heap

1 October 2020 OSU CSE 43

40 30 20 10 50

slide-44
SLIDE 44

1 October 2020 OSU CSE 44

40 30 20 10 50 4 3 1 2

Interpreting an array as a Heap

Because it’s a complete binary tree, the nodes can be numbered top-to- bottom, left-to-right.

slide-45
SLIDE 45

1 October 2020 OSU CSE 45

40 30 20 10 50 4 3 1 2 10 20 50 40 30 1 2 3 4

slide-46
SLIDE 46

1 October 2020 OSU CSE 46

40 30 20 10 50 4 3 1 2 10 20 50 40 30 1 2 3 4 At what index in the array is the left child of the node at index i?

slide-47
SLIDE 47

1 October 2020 OSU CSE 47

40 30 20 10 50 4 3 1 2 10 20 50 40 30 1 2 3 4 At what index in the array is the right child

  • f the node at index i?
slide-48
SLIDE 48

Resources

  • Wikipedia: Heapsort

– http://en.wikipedia.org/wiki/Heapsort

  • Wikipedia: Heap (data structure)

– http://en.wikipedia.org/wiki/Heap_(data_structure)

  • Big Java (4th ed), Sections 16.8, 16.9

– https://library.ohio-state.edu/record=b8540788~S7

1 October 2020 OSU CSE 48