TODAY Heapsort API Elementary implementations Binary heaps - - PowerPoint PPT Presentation

today
SMART_READER_LITE
LIVE PREVIEW

TODAY Heapsort API Elementary implementations Binary heaps - - PowerPoint PPT Presentation

BBM 202 - ALGORITHMS D EPT . OF C OMPUTER E NGINEERING P RIORITY Q UEUES AND H EAPSORT Acknowledgement: The course slides are adapted from the slides prepared by R. Sedgewick and K. Wayne of Princeton University. TODAY Heapsort


slide-1
SLIDE 1

BBM 202 - ALGORITHMS

PRIORITY QUEUES AND HEAPSORT

  • DEPT. OF COMPUTER ENGINEERING

Acknowledgement: The course slides are adapted from the slides prepared by 


  • R. Sedgewick and K. Wayne of Princeton University.
slide-2
SLIDE 2

TODAY

  • Heapsort
  • API
  • Elementary implementations
  • Binary heaps
  • Heapsort
slide-3
SLIDE 3

3

Priority queue

  • Collections. Insert and delete items. Which item to delete?
  • Stack. Remove the item most recently added.
  • Queue. Remove the item least recently added.

Randomized queue. Remove a random item. Priority queue. Remove the largest (or smallest) item.

P 1 Q 2 P E 3 P Q Q 2 P E E P X 3 P E A 4 P E X M 5 P E X A X 4 P E M A A E M P P 5 P E M A L 6 P E M A P E 7 P E M A P L P 6 E M A P L E A E E L M P insert insert insert remove max insert insert insert remove max insert insert insert remove max

  • peration argument

return value

slide-4
SLIDE 4

4

Priority queue API

  • Requirement. Generic items are Comparable.

public class MaxPQ<Key extends Comparable<Key>> MaxPQ() create an empty priority queue MaxPQ(Key[] a) create a priority queue with given keys void insert(Key v) insert a key into the priority queue Key delMax() return and remove the largest key boolean isEmpty() is the priority queue empty? Key max() return the largest key int size() number of entries in the priority queue

Key must be Comparable (bounded type parameter)

slide-5
SLIDE 5

5

Priority queue applications

  • Event-driven simulation.

[customers in a line, colliding particles]

  • Numerical computation.

[reducing roundoff error]

  • Data compression.

[Huffman codes]

  • Graph searching.

[Dijkstra's algorithm, Prim's algorithm]

  • Computational number theory.

[sum of powers]

  • Artificial intelligence.

[A* search]

  • Statistics.

[maintain largest M values in a sequence]

  • Operating systems.

[load balancing, interrupt handling]

  • Discrete optimization.

[bin packing, scheduling]

  • Spam filtering.

[Bayesian spam filter]

Generalizes: stack, queue, randomized queue.

slide-6
SLIDE 6
  • Challenge. Find the largest M items in a stream of N items (N huge, M

large).

  • Fraud detection: isolate $$ transactions.
  • File maintenance: find biggest files or directories.
  • Constraint. Not enough memory to store N items.

6

Priority queue client example

% more tinyBatch.txt Turing 6/17/1990 644.08 vonNeumann 3/26/2002 4121.85 Dijkstra 8/22/2007 2678.40 vonNeumann 1/11/1999 4409.74 Dijkstra 11/18/1995 837.42 Hoare 5/10/1993 3229.27 vonNeumann 2/12/1994 4732.35 Hoare 8/18/1992 4381.21 Turing 1/11/2002 66.10 Thompson 2/27/2000 4747.08 Turing 2/11/1991 2156.86 Hoare 8/12/2003 1025.70 vonNeumann 10/13/1993 2520.97 Dijkstra 9/10/2000 708.95 Turing 10/12/1993 3532.36 Hoare 2/10/2005 4050.20 % java TopM 5 < tinyBatch.txt Thompson 2/27/2000 4747.08 vonNeumann 2/12/1994 4732.35 vonNeumann 1/11/1999 4409.74 Hoare 8/18/1992 4381.21 vonNeumann 3/26/2002 4121.85

sort key

slide-7
SLIDE 7
  • Challenge. Find the largest M items in a stream of N items (N huge, M large).

7

Priority queue client example

implementation time space sort N log N N elementary PQ M N M binary heap N log M M best in theory N M

  • rder of growth of finding the largest M in a stream of N items

MinPQ<Transaction> pq = new MinPQ<Transaction>(); while (StdIn.hasNextLine()) { String line = StdIn.readLine(); Transaction item = new Transaction(line); pq.insert(item); if (pq.size() > M) pq.delMin(); }

pq contains
 largest M items use a min-oriented pq Transaction data
 type is Comparable (ordered by $$)

slide-8
SLIDE 8

PRIORITY QUEUES AND HEAPSORT

  • Heapsort
  • API
  • Elementary implementations
  • Binary heaps
  • Heapsort
slide-9
SLIDE 9

9

Priority queue: unordered and ordered array implementation

P 1 P P Q 2 P Q P Q E 3 P Q E E P Q Q 2 P E E P X 3 P E X E P X A 4 P E X A A E P X M 5 P E X A M A E M P X X 4 P E M A A E M P P 5 P E M A P A E M P P L 6 P E M A P L A E L M P P E 7 P E M A P L E A E E L M P P P 6 E M A P L E A E E L M P insert insert insert remove max insert insert insert remove max insert insert insert remove max

  • peration argument

return value contents (unordered) contents (ordered) size A sequence of operations on a priority queue

slide-10
SLIDE 10

10

Priority queue: unordered array implementation

public class UnorderedMaxPQ<Key extends Comparable<Key>> { private Key[] pq; // pq[i] = ith element on pq private int N; // number of elements on pq public UnorderedMaxPQ(int capacity) { pq = (Key[]) new Comparable[capacity]; } public boolean isEmpty() { return N == 0; } public void insert(Key x) { pq[N++] = x; } public Key delMax() { int max = 0; for (int i = 1; i < N; i++) if (less(max, i)) max = i; exch(max, N-1); return pq[--N]; } }

no generic
 array creation less() and exch()
 similar to sorting methods null out entry to prevent loitering

slide-11
SLIDE 11

11

Priority queue elementary implementations

  • Challenge. Implement all operations efficiently.

implementation insert del max max unordered array 1 N N

  • rdered array

N 1 1 goal log N log N log N

  • rder-of-growth of running time for priority queue with N items
slide-12
SLIDE 12

PRIORITY QUEUES AND HEAPSORT

  • Heapsort
  • API
  • Elementary implementations
  • Binary heaps
  • Heapsort
slide-13
SLIDE 13

Binary tree. Empty or node with links to left and right binary trees.
 Complete tree. Perfectly balanced, except for bottom level.
 
 
 
 
 
 
 
 


  • Property. Height of complete tree with N nodes is ⎣lg N⎦.
  • Pf. Height only increases when N is a power of 2.

13

Binary tree

complete tree with N = 16 nodes (height = 4)

slide-14
SLIDE 14

14

A complete binary tree in nature

slide-15
SLIDE 15

15

Binary heap representations

Binary heap. Array representation of a heap-ordered complete binary tree.
 Heap-ordered binary tree.

  • Keys in nodes.
  • Parent's key no smaller than


children's keys.


Array representation.

  • Indices start at 1.
  • Take nodes in level order.
  • No explicit links needed!

i 0 1 2 3 4 5 6 7 8 9 10 11 a[i] - T S R P N O A E I H G E I H G P N O A S R T

1 2 4 5 6 7 10 11 8 9 3

E P I S H N G T O R A Heap representations

slide-16
SLIDE 16

16

Binary heap properties

  • Proposition. Largest key is a[1], which is root of binary tree.

  • Proposition. Can use array indices to move through tree.
  • Parent of node at k is at k/2.
  • Children of node at k are at 2k and 2k+1.

i 0 1 2 3 4 5 6 7 8 9 10 11 a[i] - T S R P N O A E I H G E I H G P N O A S R T

1 2 4 5 6 7 10 11 8 9 3

E P I S H N G T O R A Heap representations

slide-17
SLIDE 17

5

E N I P H T G S O R A violates heap order (larger key than parent) E N I S H P G T O R A

5 2 1

  • Scenario. Child's key becomes larger key than its parent's key.

To eliminate the violation:

  • Exchange key in child with key in parent.
  • Repeat until heap order restored.

Peter principle. Node promoted to level of incompetence.

private void swim(int k) { while (k > 1 && less(k/2, k)) { exch(k, k/2); k = k/2; } }

17

Promotion in a heap

parent of node at k is at k/2

slide-18
SLIDE 18
  • Insert. Add node at end, then swim it up.
  • Cost. At most 1 + lg N compares.

E N I P G H S T O R A key to insert E N I P G H S T O R A add key to heap violates heap order E N I S G P H T O R A swim up

insert

18

Insertion in a heap

public void insert(Key x) { pq[++N] = x; swim(N); }

slide-19
SLIDE 19
  • Scenario. Parent's key becomes smaller than one (or both) of its children's

keys. To eliminate the violation:

  • Exchange key in parent with key in larger child.
  • Repeat until heap order restored.

Power struggle. Better subordinate promoted.

private void sink(int k) { while (2*k <= N) { int j = 2*k; if (j < N && less(j, j+1)) j++; if (!less(k, j)) break; exch(k, j); k = j; } }

19

Demotion in a heap

children of node
 at k are 2k and 2k+1

5

E P I H N S G T O R A violates heap order (smaller than a child) E P I S H N G T O R A

5 10 2 2

Top-down reheapify (sink)

why not smaller child?

slide-20
SLIDE 20

Delete max. Exchange root with node at end, then sink it down.

  • Cost. At most 2 lg N compares.

20

Delete the maximum in a heap

public Key delMax() { Key max = pq[1]; exch(1, N--); sink(1); pq[N+1] = null; return max; }

prevent loitering E N I S G P H T O R A key to remove violates heap order exchange key with root E N I S G P T H O R A remove node from heap E N I P G H S O R A sink down

remove the maximum

slide-21
SLIDE 21
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

21

Binary heap operations

T P R N H O A E I G R H O A N E I G P T

heap ordered

slide-22
SLIDE 22
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

22

Binary heap operations

T P R N H O A E I G R H O A N E I G S P T

add to heap

insert S

slide-23
SLIDE 23
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

23

Binary heap operations

T P R N H O A E I G S

11 11

R H O A N E I G S P T

violates heap order (swim up)

insert S

slide-24
SLIDE 24
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

24

Binary heap operations

11 11

R H O A N E I G S P T

5 5

T P R N S O A E I G H

11

insert S

violates heap order (swim up)

slide-25
SLIDE 25
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

25

Binary heap operations

11 11

R H O A N E I G S P T

5 5 2 2

T S R N P O A E I G H

11

insert S

violates heap order (swim up)

slide-26
SLIDE 26
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

26

Binary heap operations

T S R N P O A E I G H R H O A N E I G S P T

heap ordered

slide-27
SLIDE 27
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

27

Binary heap operations

T S R N P O A E I G H R H O A N E I G S P T

remove the maximum

1 1

slide-28
SLIDE 28
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

28

Binary heap operations

T S R N P O A E I G H R H O A N E I G S P T

remove the maximum

1 1 11 11

exchange with root

slide-29
SLIDE 29
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

29

Binary heap operations

H S R N P O A E I G T R H O A N E I G S P T

remove the maximum

1 1 11 11

exchange with root

slide-30
SLIDE 30
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

30

Binary heap operations

R H O A N E I G S P T

remove the maximum

1 1

violates heap order (sink down)

H S R N P O A E I G T

slide-31
SLIDE 31
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

31

Binary heap operations

S H R N P O A E I G T R H O A N E I G S P T

remove the maximum

1 1 2 2

violates heap order (sink down)

slide-32
SLIDE 32
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

32

Binary heap operations

S P R N H O A E I G T R O A P E I G S T

remove the maximum

1 1 2 2 5 5

violates heap order (sink down)

N H

slide-33
SLIDE 33
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

33

Binary heap operations

S P R N H O A E I G R O A P E I G S H

heap ordered

N

slide-34
SLIDE 34
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

34

Binary heap operations

S P R N H O A E I G R O A P E I G S H

remove the maximum

1 1

N

slide-35
SLIDE 35
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

35

Binary heap operations

S P R N H O A E I G R O A P E I G S H

remove the maximum

1 1

exchange with root

N

slide-36
SLIDE 36
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

36

Binary heap operations

G P R N H O A E I S R O A P E I G S H

remove the maximum

1 1

exchange with root

10 10

N

slide-37
SLIDE 37
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

37

Binary heap operations

G P R N H O A E I S R O A P E I G S H

remove the maximum

1 1

violates heap order (sink down)

N

slide-38
SLIDE 38
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

38

Binary heap operations

R P G N H O A E I S R O A P E I G S H

remove the maximum

1 1

violates heap order (sink down)

3 3

N

slide-39
SLIDE 39
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

39

Binary heap operations

R P O N H G A E I S R O A P E I G S H

remove the maximum

1 1

violates heap order (sink down)

3 3 6 6

N

slide-40
SLIDE 40
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

40

Binary heap operations

R P O N H G A E I R O A P E I G H

heap ordered

N

slide-41
SLIDE 41
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

41

Binary heap operations

R P O N H G A E I S R O A P E I G H

insert S

S

add to heap

10

N

slide-42
SLIDE 42
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

42

Binary heap operations

R P O N H G A E I S R O A P E I G H

insert S

S

10 10

violates heap order (swim up)

N

slide-43
SLIDE 43
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

43

Binary heap operations

R P O N S G A E I H R O A P E I G H

insert S

S

10 10

violates heap order (swim up)

5 5

N

slide-44
SLIDE 44
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

44

Binary heap operations

R S O N P G A E I H R O A P E I G H

insert S

S

10 10

violates heap order (swim up)

5 5 2 2

N

slide-45
SLIDE 45
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

45

Binary heap operations

S R O N P G A E I H R O A P E I G H

insert S

S

10 10

violates heap order (swim up)

5 5 2 2 1 1

N

slide-46
SLIDE 46
  • Insert. Add node at end, then swim it up.

Remove the maximum. Exchange root with node at end, then sink it down.

46

Binary heap operations

S R O N P G A E I H R O A P E I G H

heap ordered

S N

slide-47
SLIDE 47

47

Binary heap: Java implementation

public class MaxPQ<Key extends Comparable<Key>> { private Key[] pq; private int N; public MaxPQ(int capacity) { pq = (Key[]) new Comparable[capacity+1]; } public boolean isEmpty() { return N == 0; } public void insert(Key key) { /* see previous code */ } public Key delMax() { /* see previous code */ } private void swim(int k) { /* see previous code */ } private void sink(int k) { /* see previous code */ } private boolean less(int i, int j) { return pq[i].compareTo(pq[j]) < 0; } private void exch(int i, int j) { Key t = pq[i]; pq[i] = pq[j]; pq[j] = t; } }

array helper functions heap helper functions PQ ops

slide-48
SLIDE 48

48

Priority queues implementation cost summary

implementation insert del max max unordered array 1 N N

  • rdered array

N 1 1 binary heap log N log N 1 d-ary heap logd N d logd N 1 Fibonacci 1 log N † 1 impossible 1 1 1

  • rder-of-growth of running time for priority queue with N items

† amortized why impossible?

slide-49
SLIDE 49

49

Binary heap considerations

Immutability of keys.

  • Assumption: client does not change keys while they're on the PQ.
  • Best practice: use immutable keys.


Underflow and overflow.

  • Underflow: throw exception if deleting from empty PQ.
  • Overflow: add no-arg constructor and use resizing array.


Minimum-oriented priority queue.

  • Replace less() with greater().
  • Implement greater().


Other operations.

  • Remove an arbitrary item.
  • Change the priority of an item.

can implement with sink() and swim() [stay tuned] leads to log N amortized time per op (how to make worst case?)

slide-50
SLIDE 50

50

Immutability: implementing in Java

Data type. Set of values and operations on those values. Immutable data type. Can't change the data type value once created.
 
 
 
 
 
 
 
 
 
 


  • Immutable. String, Integer, Double, Color, Vector, Transaction, Point2D.
  • Mutable. StringBuilder, Stack, Counter, Java array.

public final class Vector { private final int N; private final double[] data; public Vector(double[] data) { this.N = data.length; this.data = new double[N]; for (int i = 0; i < N; i++) this.data[i] = data[i]; } … }

defensive copy of mutable instance variables all instance variables private and final instance methods don't change instance variables can't override instance methods

slide-51
SLIDE 51

51

Immutability: properties

Data type. Set of values and operations on those values. Immutable data type. Can't change the data type value once created. Advantages.

  • Simplifies debugging.
  • Safer in presence of hostile code.
  • Simplifies concurrent programming.
  • Safe to use as key in priority queue or symbol table.

  • Disadvantage. Must create new object for each data type value.

“ Classes should be immutable unless there's a very good reason to make them mutable.… If a class cannot be made immutable, you should still limit its mutability as much as possible. ” — Joshua Bloch (Java architect)

slide-52
SLIDE 52

PRIORITY QUEUES AND HEAPSORT

  • Heapsort
  • API
  • Elementary implementations
  • Binary heaps
  • Heapsort
slide-53
SLIDE 53

53

Heapsort

Basic plan for in-place sort.

  • Create max-heap with all N keys.
  • Repeatedly remove the maximum key.

M T P O L E E S X R A

1 2 4 5 6 7 8 9 10 11 3

M P O T E L E X R S A

R L S E T M X A O E P

1 2 4 5 6 7 8 9 10 11 3

start with array of keys in arbitrary order build a max-heap (in place) sorted result (in place)

slide-54
SLIDE 54

Starting point. Array in arbitrary order.

54

Heapsort

S O R T E X A M P L E

1 2 3 4 5 6 7 8 9 10 11 5 10 11

R E X A T M P L E O S

8 9 4 7 6 3 2 1 we assume array entries are indexed 1 to N

slide-55
SLIDE 55

Heap construction. Build max heap using bottom-up method.

55

Heapsort

1-node heaps

S O R T E X A M P L E R E X A T M P L E O S

8 9 10 11 10 11 8 9 6 7 7 6

slide-56
SLIDE 56

Heap construction. Build max heap using bottom-up method.

56

Heapsort

sink 5

5

S O R T E X A M P L E

5

R E X A T M P L E O S

slide-57
SLIDE 57

Heap construction. Build max heap using bottom-up method.

57

Heapsort

sink 5

5 10

R E X A T M P L E O S S O R T L X A M P E E

5 10

slide-58
SLIDE 58

Heap construction. Build max heap using bottom-up method.

58

Heapsort

sink 5

R E X A T M P L E O S S O R T L X A M P E E

3-node heap

slide-59
SLIDE 59

Heap construction. Build max heap using bottom-up method.

59

Heapsort

sink 4

R E X A T M P L E O S S O R T L X A M P E E

4 4

slide-60
SLIDE 60

Heap construction. Build max heap using bottom-up method.

60

Heapsort

sink 4

R E X A T M P L E O S S O R T L X A M P E E

3-node heap

slide-61
SLIDE 61

Heap construction. Build max heap using bottom-up method.

61

Heapsort

sink 3

R E X A T M P L E O S S O R T L X A M P E E

3 3

slide-62
SLIDE 62

Heap construction. Build max heap using bottom-up method.

62

Heapsort

sink 3

R E X A T M P L E O S S O X T L R A M P E E

3 6 6 3

slide-63
SLIDE 63

Heap construction. Build max heap using bottom-up method.

63

Heapsort

sink 3

R E X A T M P L E O S S O X T L A A M P E E

3-node heap

slide-64
SLIDE 64

Heap construction. Build max heap using bottom-up method.

64

Heapsort

sink 2

R E X A T M P L E O S S O X T L R A M P E E

2 2

slide-65
SLIDE 65

Heap construction. Build max heap using bottom-up method.

65

Heapsort

R E X A T M P L E O S S T X O L R A M P E E

4 2 2 4

sink 2

slide-66
SLIDE 66

Heap construction. Build max heap using bottom-up method.

66

Heapsort

R E X A T M P L E O S S T X P L R A M O E E

9 4 2 2 4 9

sink 2

slide-67
SLIDE 67

Heap construction. Build max heap using bottom-up method.

67

Heapsort

sink 2

R E X A T M P L E O S S T X P L R A M O E E

7-node heap

slide-68
SLIDE 68

Heap construction. Build max heap using bottom-up method.

68

Heapsort

sink 1

R E X A T M P L E O S S T X P L R A M O E E

1 1

slide-69
SLIDE 69

Heap construction. Build max heap using bottom-up method.

69

Heapsort

sink 1

R E X A T M P L E O S X T S P L R A M O E E

1 3 3 1

slide-70
SLIDE 70

Heap construction. Build max heap using bottom-up method.

70

Heapsort

R E X A T M P L E O S X T S P L R A M O E E

11-node heap

end of construction phase

slide-71
SLIDE 71
  • Sortdown. Repeatedly delete the largest remaining item.

71

Heapsort

exchange 1 and 11

T P S X T S P L R A M O E E

1 1 11 11

R E A M L O X E

slide-72
SLIDE 72
  • Sortdown. Repeatedly delete the largest remaining item.

72

Heapsort

R E A T M P L O S E T S P L R A M O E X

1 1 11 11

X E

exchange 1 and 11

slide-73
SLIDE 73
  • Sortdown. Repeatedly delete the largest remaining item.

73

Heapsort

R E A M P L O S E T S P L R A M O E X

1 1

T E

sink 1

X

slide-74
SLIDE 74
  • Sortdown. Repeatedly delete the largest remaining item.

74

Heapsort

R E A T M P L E O S T E S P L R A M O E X

1 1 2 2

sink 1

X

slide-75
SLIDE 75
  • Sortdown. Repeatedly delete the largest remaining item.

75

Heapsort

R E A T M P L E O S T P S E L R A M O E X

1 1 2 2 4 4

sink 1

X

slide-76
SLIDE 76
  • Sortdown. Repeatedly delete the largest remaining item.

76

Heapsort

R E A T M P L E O S T P S O L R A M E E X

1 1 2 2 4 4 9 9

sink 1

X

slide-77
SLIDE 77
  • Sortdown. Repeatedly delete the largest remaining item.

77

Heapsort

R E A T M P L E O S T P S O L R A M E E X X

slide-78
SLIDE 78
  • Sortdown. Repeatedly delete the largest remaining item.

78

Heapsort

T P S O L R A M E E X

1 1

exchange 1 and 10

10 10

T P S O L R A M E E X

slide-79
SLIDE 79
  • Sortdown. Repeatedly delete the largest remaining item.

79

Heapsort

E P S O L R A M E T X

1 1

exchange 1 and 10

10 10

T P S O L R A M E E X

slide-80
SLIDE 80
  • Sortdown. Repeatedly delete the largest remaining item.

80

Heapsort

E P S O L R A M E T X

1 1

sink 1

T P S O L R A M E E X

slide-81
SLIDE 81
  • Sortdown. Repeatedly delete the largest remaining item.

81

Heapsort

S P E O L R A M E T X

1 1

sink 1

T P S O L R A M E E X

3 3

slide-82
SLIDE 82
  • Sortdown. Repeatedly delete the largest remaining item.

82

Heapsort

S P R O L E A M E T X

1 1

sink 1

T P S O L R A M E E X

3 3 6 6

slide-83
SLIDE 83
  • Sortdown. Repeatedly delete the largest remaining item.

83

Heapsort

S P R O L E A M E T X T P S O L R A M E E X

slide-84
SLIDE 84
  • Sortdown. Repeatedly delete the largest remaining item.

84

Heapsort

S P R O L E A M E T X

1 1

exchange 1 and 9

T P S O L R A M E E X

9 9

slide-85
SLIDE 85
  • Sortdown. Repeatedly delete the largest remaining item.

85

Heapsort

E P R O L E A M S T X

1 1

exchange 1 and 9

T P S O L R A M E E X

9 9

slide-86
SLIDE 86
  • Sortdown. Repeatedly delete the largest remaining item.

86

Heapsort

E P R O L E A M S T X

1 1

sink 1

T P S O L R A M E E X

slide-87
SLIDE 87
  • Sortdown. Repeatedly delete the largest remaining item.

87

Heapsort

R P E O L E A M S T X

1 1

sink 1

T P S O L R A M E E X

3 3

slide-88
SLIDE 88
  • Sortdown. Repeatedly delete the largest remaining item.

88

Heapsort

R P E O L E A M S T X T P S O L R A M E E X

slide-89
SLIDE 89
  • Sortdown. Repeatedly delete the largest remaining item.

89

Heapsort

R P E O L E A M S T X

1 1

exchange 1 and 8

T P S O L R A M E E X

8 8

slide-90
SLIDE 90
  • Sortdown. Repeatedly delete the largest remaining item.

90

Heapsort

M P E O L E A R S T X

1 1

exchange 1 and 8

T P S O L R A M E E X

8 8

slide-91
SLIDE 91
  • Sortdown. Repeatedly delete the largest remaining item.

91

Heapsort

M P E O L E A R S T X

1 1

sink 1

T P S O L R A M E E X

slide-92
SLIDE 92
  • Sortdown. Repeatedly delete the largest remaining item.

92

Heapsort

P M E O L E A R S T X

1 1

sink 1

T P S O L R A M E E X

2 2

slide-93
SLIDE 93
  • Sortdown. Repeatedly delete the largest remaining item.

93

Heapsort

P O E M L E A R S T X

1 1

sink 1

T P S O L R A M E E X

2 2 4 4

slide-94
SLIDE 94
  • Sortdown. Repeatedly delete the largest remaining item.

94

Heapsort

P O E M L E A R S T X T P S O L R A M E E X

slide-95
SLIDE 95
  • Sortdown. Repeatedly delete the largest remaining item.

95

Heapsort

P O E M L E A R S T X

1 1

exchange 1 and 7

T P S O L R A M E E X

7 7

slide-96
SLIDE 96
  • Sortdown. Repeatedly delete the largest remaining item.

96

Heapsort

A O E M L E P R S T X

1 1

exchange 1 and 7

T P S O L R A M E E X

7 7

slide-97
SLIDE 97
  • Sortdown. Repeatedly delete the largest remaining item.

97

Heapsort

A O E M L E P R S T X

1 1

sink 1

T P S O L R A M E E X

slide-98
SLIDE 98
  • Sortdown. Repeatedly delete the largest remaining item.

98

Heapsort

O A E M L E P R S T X

1 1

sink 1

T P S O L R A M E E X

2 2

slide-99
SLIDE 99
  • Sortdown. Repeatedly delete the largest remaining item.

99

Heapsort

O M E A L E P R S T X

1 1

sink 1

T P S O L R A M E E X

2 2 4 4

slide-100
SLIDE 100
  • Sortdown. Repeatedly delete the largest remaining item.

100

Heapsort

O M E A L E P R S T X

sink 1

T P S O L R A M E E X

slide-101
SLIDE 101
  • Sortdown. Repeatedly delete the largest remaining item.

101

Heapsort

O M E A L E P R S T X

1 1

exchange 1 and 6

T P S O L R A M E E X

6 6

slide-102
SLIDE 102
  • Sortdown. Repeatedly delete the largest remaining item.

102

Heapsort

E M E A L O P R S T X

1 1

exchange 1 and 6

T P S O L R A M E E X

6 6

slide-103
SLIDE 103
  • Sortdown. Repeatedly delete the largest remaining item.

103

Heapsort

E M E A L O P R S T X T P S O L R A M E E X

1

sink 1

1

slide-104
SLIDE 104
  • Sortdown. Repeatedly delete the largest remaining item.

104

Heapsort

M E E A L O P R S T X T P S O L R A M E E X

1

sink 1

1 2 2

slide-105
SLIDE 105
  • Sortdown. Repeatedly delete the largest remaining item.

105

Heapsort

M L E A E O P R S T X T P S O L R A M E E X

1

sink 1

1 2 2 5 5

slide-106
SLIDE 106
  • Sortdown. Repeatedly delete the largest remaining item.

106

Heapsort

M L E A E O P R S T X T P S O L R A M E E X

slide-107
SLIDE 107
  • Sortdown. Repeatedly delete the largest remaining item.

107

Heapsort

M L E A E O P R S T X T P S O L R A M E E X

1

exchange 1 and 5

1 5 5

slide-108
SLIDE 108
  • Sortdown. Repeatedly delete the largest remaining item.

108

Heapsort

E L E A M O P R S T X T P S O L R A M E E X

1

exchange 1 and 5

1 5 5

slide-109
SLIDE 109
  • Sortdown. Repeatedly delete the largest remaining item.

109

Heapsort

E L E A M O P R S T X T P S O L R A M E E X

1 1

sink 1

slide-110
SLIDE 110
  • Sortdown. Repeatedly delete the largest remaining item.

110

Heapsort

L E E A M O P R S T X T P S O L R A M E E X

1 1

sink 1

2 2

slide-111
SLIDE 111
  • Sortdown. Repeatedly delete the largest remaining item.

111

Heapsort

L E E A M O P R S T X T P S O L R A M E E X

slide-112
SLIDE 112
  • Sortdown. Repeatedly delete the largest remaining item.

112

Heapsort

L E E A M O P R S T X T P S O L R A M E E X

1 4 4 1

exchange 1 and 4

slide-113
SLIDE 113
  • Sortdown. Repeatedly delete the largest remaining item.

113

Heapsort

A E E L M O P R S T X T P S O L R A M E E X

1 4 4 1

exchange 1 and 4

slide-114
SLIDE 114
  • Sortdown. Repeatedly delete the largest remaining item.

114

Heapsort

A E E L M O P R S T X T P S O L R A M E E X

1 1

sink 1

slide-115
SLIDE 115
  • Sortdown. Repeatedly delete the largest remaining item.

115

Heapsort

E A E L M O P R S T X T P S O L R A M E E X

1 1

sink 1

2 2

slide-116
SLIDE 116
  • Sortdown. Repeatedly delete the largest remaining item.

116

Heapsort

E A E L M O P R S T X T P S O L R A M E E X

slide-117
SLIDE 117
  • Sortdown. Repeatedly delete the largest remaining item.

117

Heapsort

E A E L M O P R S T X T P S O L R A M E E X

1

exchange 1 and 3

1 3 3

slide-118
SLIDE 118
  • Sortdown. Repeatedly delete the largest remaining item.

118

Heapsort

E A E L M O P R S T X T P S O L R A M E E X

1

exchange 1 and 3

1 3 3

slide-119
SLIDE 119
  • Sortdown. Repeatedly delete the largest remaining item.

119

Heapsort

E A E L M O P R S T X T P S O L R A M E E X

1

sink 1

1

slide-120
SLIDE 120
  • Sortdown. Repeatedly delete the largest remaining item.

120

Heapsort

E A E L M O P R S T X T P S O L R A M E E X

slide-121
SLIDE 121
  • Sortdown. Repeatedly delete the largest remaining item.

121

Heapsort

E A E L M O P R S T X T P S O L R A M E E X

exchange 1 and 2

1 2 2 1

slide-122
SLIDE 122
  • Sortdown. Repeatedly delete the largest remaining item.

122

Heapsort

A E E L M O P R S T X T P S O L R A M E E X

exchange 1 and 2

1 2 2 1

slide-123
SLIDE 123
  • Sortdown. Repeatedly delete the largest remaining item.

123

Heapsort

A E E L M O P R S T X T P S O L R A M E E X

slide-124
SLIDE 124
  • Sortdown. Repeatedly delete the largest remaining item.

124

Heapsort

A E E L M O P R S T X T P S O L R A M E E X

end of sortdown phase

slide-125
SLIDE 125

Ending point. Array in sorted order.

125

Heapsort

A E E L M O P R S T X T P S O L R A M E E X

1 2 3 4 5 6 7 8 9 10 11

slide-126
SLIDE 126

126

Heapsort: heap construction

First pass. Build heap using bottom-up method.

for (int k = N/2; k >= 1; k--) sink(a, k, N);

sink(5, 11) sink(4, 11)

M T P O L E E S X R A M T P O E L E S X R A M T P O E L E S X R A

1 2 4 5 6 7 8 9 10 11 3

heap construction

starting point (arbitrary order)

sink(3, 11) sink(2, 11) sink(1, 11)

Heapsor M T P O E L E S R X A M P O T E L E S R X A M P O T E L E X R S A result (heap-ordered)

slide-127
SLIDE 127

127

Heapsort: sortdown

Second pass.

  • Remove the maximum, one at a time.
  • Leave in array, instead of nulling out.

while (N > 1) { exch(a, 1, N--); sink(a, 1, N); }

exch(1, 6) sink(1, 5) exch(1, 5) sink(1, 4) exch(1, 4) sink(1, 3) exch(1, 3) sink(1, 2) exch(1, 2) sink(1, 1) sortdown exch(1, 11) sink(1, 10) exch(1, 10) sink(1, 9) exch(1, 9) sink(1, 8) exch(1, 8) sink(1, 7) exch(1, 7) sink(1, 6)

R A S L T E X M O E P R A S E T M X L O E P R L S A T M X E O E P R L S A T M X E O E P R L S E T M X A O E P R L S E T M X A O E P M P O T E L E X R S A M O E P E L X T R S A M O E P T L X S E R A M O S P T L X R E E A R M S O T L X P E E A R A S M T L X O E E P

1 2 4 5 6 7 8 9 10 11 3

result (sorted) starting point (heap-ordered)

slide-128
SLIDE 128

128

Heapsort: Java implementation

public class Heap { public static void sort(Comparable[] pq) { int N = pq.length; for (int k = N/2; k >= 1; k--) sink(pq, k, N); while (N > 1) { exch(pq, 1, N); sink(pq, 1, --N); } } private static void sink(Comparable[] pq, int k, int N) { /* as before */ } private static boolean less(Comparable[] pq, int i, int j) { /* as before */ } private static void exch(Comparable[] pq, int i, int j) { /* as before */ } }

but convert from 1-based indexing to 0-base indexing

slide-129
SLIDE 129

129

Heapsort: trace

a[i] N k 0 1 2 3 4 5 6 7 8 9 10 11 S O R T E X A M P L E 11 5 S O R T L X A M P E E 11 4 S O R T L X A M P E E 11 3 S O X T L R A M P E E 11 2 S T X P L R A M O E E 11 1 X T S P L R A M O E E X T S P L R A M O E E 10 1 T P S O L R A M E E X 9 1 S P R O L E A M E T X 8 1 R P E O L E A M S T X 7 1 P O E M L E A R S T X 6 1 O M E A L E P R S T X 5 1 M L E A E O P R S T X 4 1 L E E A M O P R S T X 3 1 E A E L M O P R S T X 2 1 E A E L M O P R S T X 1 1 A E E L M O P R S T X A E E L M O P R S T X initial values heap-ordered sorted result

Heapsort trace (array contents just after each sink)

slide-130
SLIDE 130

Heapsort animation

130

http://www.sorting-algorithms.com/heap-sort

50 random items in order algorithm position not in order

slide-131
SLIDE 131
  • Proposition. Heap construction uses fewer than 2 N compares and

exchanges.

  • Proposition. Heapsort uses at most 2 N lg N compares and exchanges.

  • Significance. In-place sorting algorithm with N log N worst-case.
  • Mergesort: no, linear extra space.
  • Quicksort: no, quadratic time in worst case.
  • Heapsort: yes!


Bottom line. Heapsort is optimal for both time and space, but:

  • Inner loop longer than quicksort’s.
  • Makes poor use of cache memory.
  • Not stable.

131

Heapsort: mathematical analysis

in-place merge possible, not practical N log N worst-case quicksort possible, not practical

slide-132
SLIDE 132

132

Sorting algorithms: summary

# key comparisons to sort N distinct randomly-ordered keys inplace? stable? worst average best remarks selection x N 2 / 2 N 2 / 2 N 2 / 2 N exchanges insertion x x N 2 / 2 N 2 / 4 N use for small N or partially ordered shell x ? ? N tight code, subquadratic quick x N 2 / 2 2 N ln N N lg N N log N probabilistic guarantee
 fastest in practice 3-way quick x N 2 / 2 2 N ln N N improves quicksort in presence


  • f duplicate keys

merge x N lg N N lg N N lg N N log N guarantee, stable heap x 2 N lg N 2 N lg N N lg N N log N guarantee, in-place ??? x x N lg N N lg N N lg N holy sorting grail