the heapsort algorithm - universitas brawijaya · heapsort – sebastian streich, enric meinhardt 7...

25
Theory of Algorithms 15-01-2004 Heapsort – Sebastian Streich, Enric Meinhardt 1 The Heapsort Algorithm Sebastian Streich, Enric Meinhardt

Upload: others

Post on 13-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 1

The Heapsort Algorithm

Sebastian Streich,Enric Meinhardt

Page 2: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 2

Overview

1. Introduction2. What is a Heap?3. Subroutines for Heaps4. The Heapsort Function5. Bottom-up Heapsort6. Priority Queues

Page 3: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 3

Introduction

Important properties of sorting algorithms:

In placeO(n log2(n))Heapsort

In placeO(n2)Insertion sort

O(n) extra elements

O(n log2(n))Merge sort

Memoryconsumption

Processingtime

Page 4: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 4

6.5.4.3.2.1.

1.

2.

4.

3.

6.5.

What is a Heap?

Array object:

Binary tree:

Heap-size n

Heightlog2(n)

Page 5: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 5

What is a Heap?

Parent(i) = i/2

left_Child(i) = 2·i

right_Child(i) = 2·i+1

Calculating the Indices:

1.

2.

4.

3.

6.5.

Page 6: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 6

What is a Heap?

Heap property:

A[Parent(i)] ≥ A[i]

A[Parent(i)] ≤ A[i]

→ maximum element in the root (max-heap)

→ minimum element in the root (min-heap)

or

6 24

3

9

8

2

4

3 6

9 8

Page 7: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 7

Subroutines for Heaps

Heapify(A,i)

Purpose: make the subtree of A starting in node i fulfil the heap property

Pre-condition: subtrees starting in left_Child(i)and right_Child(i) must beheaps already

Page 8: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 8

Subroutines for Heaps

Heapify(A,i)

l := largest node of i and its children

if ( i ≠ l )

exchange A[i] with A[l]

Heapify(A, l)

A real implementation should not be recursive! (overhead when passing the function’s arguments)

Page 9: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 9

Subroutines for Heaps

Heapify(A,i)

Computational cost: T(n) ≤ T(2n/3) + Θ(1)

→ T(n) = O(log2(n))or T(n) = O(h)

with h being the height of node i

Page 10: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 10

Build_heap(A)

Purpose: build a heap out of array A

Pre-condition: any array A

Idea: not many elements need to be exchanged

Subroutines for Heaps

Page 11: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 11

for i = n/2 downto 1

Heapify(A, i)

- leaves of the tree are elements with i ≥ n/2- leaves are already heapified subtrees- Build_heap runs in time O(n)

Subroutines for Heaps

Build_heap(A)

Page 12: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 12

Initial random array

.

.

.n/2 calls of Heapify...

Array with the heap property

Figure taken from R. Sedgewick, Algorithms in C, Third edition, 1998 Addison-Wesley

Page 13: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 13

Purpose: sort array A (in place)

Pre-condition: any array A

Idea: make A a heap, then take out the root;repeat until the array is sorted

The Heapsort Function

Heapsort(A)

Page 14: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 14

6 24

3

9

8

6 94

3

2

8

6 94

3

8

2

2 94

3

8

6

The Heapsort Function1. 2.

3. (Heapify) 4. (Heapify)

Page 15: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 15

Build_heap(A)

for i = n downto 2

exchange A[1] with A[i]

A.size--

Heapify(A, 1)

root is swappedwith last element

The Heapsort Function

Heapsort(A)

Heapsort runs in time O(n log2(n))

→ former root is outside A

Page 16: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 16

The Heapsort FunctionFigures taken from R. Sedgewick, Algorithms in C, Third edition, 1998 Addison-Wesley

Page 17: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 17

The Heapsort Function

Page 18: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 18

The Heapsort Function

Page 19: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 19

The Heapsort Function

Page 20: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 20

The Heapsort Function

Page 21: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 21

Bottom-up Heapsort

Variant of heapsort with better performance (average)

• last element of the heap is supposed to be very small• pass it all the way down after swapping with the root• then move it up to its proper position

Page 22: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 22

Bottom-up Heapsort

Instead of do

+

Figures taken from http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/heap/heap.htm

Page 23: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 23

A priority queue is an ADT with the following operations:

- Insert a new element into the queue- Find the element with the largest key- Delete the element with the largest key

Other common operations:

- Increase the key of an element

Priority Queues

Page 24: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 24

Heaps provide an efficient implementation of priority queues:

get the maximum → take the root

delete the maximum → move the last element tothe root and heapify

insert a new element → put it at the end and raiseit until it's in place

Priority Queues

Page 25: The Heapsort Algorithm - Universitas Brawijaya · Heapsort – Sebastian Streich, Enric Meinhardt 7 Subroutines for Heaps Heapify(A,i) Purpose: make the subtree ofAstarting in node

Theory of Algorithms15-01-2004

Heapsort – Sebastian Streich, Enric Meinhardt 25

http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/heap/heapen.htm

Link to Build_heap applet: