/
1 Heaps 1 Heaps

1 Heaps - PowerPoint Presentation

olivia-moreira
olivia-moreira . @olivia-moreira
Follow
388 views
Uploaded On 2017-08-09

1 Heaps - PPT Presentation

A heap is a binary tree A heap is best implemented in sequential representation using an array Two important uses of heaps are i efficient implementation of priority queues ii sorting Heapsort ID: 577297

key heap priority node heap key node priority heaps order property downheap size log pty root 2010 goodrich tamassia

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "1 Heaps" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

1

Heaps

A heap is a binary tree.

A heap is best implemented in sequential representation (using an array).

Two important uses of heaps are:

(i) efficient implementation of priority queues

(ii) sorting -- Heapsort.Slide2

2

A Heap

10

20

30

40

50

25

55

52

42

Any node’s key value is

less than its children’s.Slide3

3

Sequential Representation of Trees

There are three methods of representing a binary tree using array representation.

1. Using index values to represent edges:

class Node {

Data

elt

; int

left; int

right; } Node;

Node[] BinaryTree[TreeSize

]; Slide4

4

Method 1: Example

A

D

B

C

E

G

I

Index

Element

Left

Right

1

A

2

3

2

B

4

6

3

C

0

0

4

D

0

0

5

I

0

0

6

E

7

0

7

G

5

0Slide5

5

Method 2

2. Store the nodes in one of the natural traversals:

class Node {

Data

elt

;

boolean left;

boolean right; };

Node[] BinaryTree[TreeSize

]; Slide6

6

Method 2: Example

A

D

B

C

E

G

I

Index

Element

Left

Right

1

A

T

T

2

B

T

T

3

D

F

F

4

E

T

F

5

G

T

F

6

I

F

F

7

C

F

F

Elements stored in Pre-Order traversalSlide7

7

Method 3

3. Store the nodes in fixed positions: (i) root goes into first index, (ii) in general left child of tree[i] is stored in tree[2i] and right child in tree[2i+1].Slide8

8

Method 3: Example

A

D

B

C

E

G

A

B

C

D

E

-

-

-

-

G

-

1

2

3

4

5

6

7

8

9

10

11

12Slide9

9

Heaps

Heaps are represented sequentially using the third method.

Heap is a

complete binary tree

: shortest-path length tree with nodes on the lowest level in their leftmost positions.

Complete Binary Tree:

let h

be the height of the heapfor i =

0, … , h - 1, there are 2i

nodes of depth iat depth h

- 1, the internal nodes are to the left of the external nodesSlide10

Heaps (Cont.)

Max-Heap has

max

element as root. Min-Heap has

min

element as root.

The elements in a heap satisfy heap conditions: for Min-Heap: key[parent] < key[left-child] or key[right-child].The

last node of a heap is the rightmost node of maximum depth

10

2

6

5

7

9

last nodeSlide11

11

Heap: An example

10

25

2

0

3

0

4

0

42

50

52

55

[1]

10

10

10

[2]

20

30

40

[3]

25

20

20

[4]

30

40

50

[5]

40

50

42

[6]

42

25

30

[7]

50

55

25

[8]

52

52

52

[9]

55

42

55

All the three arrangements

satisfy min heap conditionsSlide12

12

Heap: An example

10

20

30

40

50

25

55

52

42

[1]

10

10

10

[2]

20

30

40

[3]

25

20

20

[4]

30

40

50

[5]

40

50

42

[6]

42

25

30

[7]

50

55

25

[8]

52

52

52

[9]

55

42

55

All the three arrangements

satisfy min heap conditionsSlide13

13

Heap: An example

10

20

40

50

42

30

25

52

55

[1]

10

10

10

[2]

20

30

40

[3]

25

20

20

[4]

30

40

50

[5]

40

50

42

[6]

42

25

30

[7]

50

55

25

[8]

52

52

52

[9]

55

42

55

All the three arrangements

satisfy min heap conditionsSlide14

14

Constructing Heaps

There are two methods of constructing heaps:

Using SiftDown operation.

Using SiftUp operation.

SiftDown operation inserts a new element into the Heap from the top.

SiftUp operation inserts a new element into the Heap from the bottom.Slide15

15

ADT Heap

Elements:

The elements are called

HeapElements

.

Structure: The elements of the heap satisfy the heap conditions.

Domain: Bounded. Type name: Heap.Slide16

16

ADT Heap

Operations:

Method

SiftUp (int n)

requires: Elements H[1],H[2],…,H[n-1] satisfy heap conditions. results:

Elements H[1],H[2],…,H[n] satisfy heap conditions.Method SiftDown (int m,n)

requires: Elements H[m+1],H[m+2],…,H[n] satisfy the heap conditions. results: Elements H[m],H[m+1],…,H[n] satisfy the heap conditions.

Method Heap (int n) // Constructor results

: Elements H[1],H[2],….H[n] satisfy the heap conditions.Slide17

ADT Heap: Element

public class

HeapElement

<T> {

T data;

Priority p;

public

HeapElement(T e, Priority pty) {

data = e; p =

pty; }

// Setters/Getters...}

17Slide18

Heaps

18

Insertion into a Heap

Method

insertItem

of the priority queue ADT corresponds to the insertion of a key

k

to the heap

The insertion algorithm consists of three stepsFind the insertion node z (the new last node)

Store k at z

Restore the heap-order property (discussed next)© 2010 Goodrich, TamassiaSlide19

Heaps

19

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in O

(log n) time

© 2010 Goodrich, Tamassia

2

6

5

7

9

insertion node

zSlide20

Heaps

20

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in O

(log n) time

© 2010 Goodrich, Tamassia

2

6

5

7

9

1Slide21

Heaps

21

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in O

(log n) time

© 2010 Goodrich, Tamassia

2

1

5

7

9

6Slide22

Heaps

22

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in O

(log n) time

© 2010 Goodrich, Tamassia

1

2

5

7

9

6Slide23

Heaps

23

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in O

(log n) time

© 2010 Goodrich, Tamassia

1

2

5

7

9

6

insertion node

zSlide24

Heaps

24

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in O

(log n) time

© 2010 Goodrich, Tamassia

1

2

5

7

9

6

10Slide25

Heaps

25

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in O

(log n) time

© 2010 Goodrich, Tamassia

1

2

5

7

9

6

10

insertion node

zSlide26

Heaps

26

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

1

2

5

7

9

6

10

4Slide27

Heaps

27

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

1

2

5

7

4

6

10

9Slide28

Heaps

28

Upheap

After the insertion of a new key

k

, the heap-order property may be violated

Algorithm

upheap restores the heap-order property by swapping

k along an upward path from the insertion nodeUpheap terminates when the key

k reaches the root or a node whose parent has a key smaller than or equal to k

Since a heap has height O(log

n), upheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

1

2

4

7

5

6

10

9Slide29

Heaps

29

Removal from a Heap (§ 7.3.3)

Method removeMin of the priority queue ADT corresponds to the removal of the root key from the heap

The removal algorithm consists of three steps

Replace the root key with the key of the last node

w

Remove

w Restore the heap-order property (discussed next)

2

6

5

7

9

last node

w

7

6

5

9

w

new last node

© 2010 Goodrich, TamassiaSlide30

Heaps

30

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

2

6

5

7

9

last node

wSlide31

Heaps

31

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

7

6

5

7

9

last

node

wSlide32

Heaps

32

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

7

6

5

9

delete last

node

wSlide33

Heaps

33

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

7

6

5

9

DownHeap

/

SiftDownSlide34

Heaps

34

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

5

6

7

9Slide35

Heaps

35

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

5

6

7

9

last

node

wSlide36

Heaps

36

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

9

6

7

9

last

node

wSlide37

Heaps

37

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

9

6

7

delete last

node

wSlide38

Heaps

38

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

9

6

7

DownHeap

/

SiftDownSlide39

Heaps

39

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

6

9

7Slide40

Heaps

40

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

6

9

7

last

node

wSlide41

Heaps

41

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

9

9

7

last

node

wSlide42

Heaps

42

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

9

7

delete last

node

wSlide43

Heaps

43

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

9

7

DownHeap

/

SiftDownSlide44

Heaps

44

Downheap

After replacing the root key with the key

k

of the last node, the heap-order property may be violated

Algorithm downheap restores the heap-order property by swapping key

k

along a downward path from the rootUpheap terminates when key k reaches a leaf or a node whose children have keys greater than or equal to

k Since a heap has height O

(log n), downheap runs in

O(log n) time

© 2010 Goodrich, Tamassia

7

9Slide45

Heaps

45

Updating the Last Node

The insertion node can be found by traversing a path of

O

(log

n

)

nodesGo up until a left child or the root is reachedIf a left child is reached, go to the right child

Go down left until a leaf is reachedSimilar algorithm for updating the last node after a removal

© 2010 Goodrich, TamassiaSlide46

Heaps

46

Heap-Sort

Consider a priority queue with

n

items implemented by means of a heap

the space used is

O

(n)methods

insert and removeMin take O

(log n) time

methods size, isEmpty, and min

take time O(1) time

Using a heap-based priority queue, we can sort a sequence of

n elements in O(

n log n

) time

The resulting algorithm is called heap-sortHeap-sort is much faster than quadratic sorting algorithms, such as insertion-sort and selection-sort

© 2010 Goodrich, TamassiaSlide47

Heaps

47

Vector-based Heap Implementation

We can represent a heap with

n

keys by means of a vector of length

n

+

1

For the node at rank ithe left child is at rank 2

ithe right child is at rank 2

i +

1Links between nodes are not explicitly storedThe cell of at rank 0 is not used

Operation insert corresponds to inserting at rank n +

1Operation removeMin corresponds to removing at rank n

Yields in-place heap-sort

2

6

5

7

9

2

5

6

9

7

1

2

3

4

5

0

© 2010 Goodrich, TamassiaSlide48

Heaps

48

We can construct a heap storing

n

given keys in using a bottom-up construction with

log

n

phasesIn phase i

, pairs of heaps with 2i -

1 keys are merged into heaps with 2i

+1-1 keys

Bottom-up Heap Construction

2

i

-

1

2

i -

1

2

i

+

1

-

1

© 2010 Goodrich, TamassiaSlide49

Heaps

49

Example

15

16

12

4

7

6

20

23

25

15

16

5

12

4

11

7

6

27

20

23

© 2010 Goodrich, TamassiaSlide50

Heaps

50

Example (contd.)

25

15

16

5

12

4

11

9

6

27

20

23

15

25

16

4

12

5

6

9

11

23

20

27

© 2010 Goodrich, TamassiaSlide51

Heaps

51

Example (contd.)

7

15

25

16

4

12

5

8

6

9

11

23

20

27

4

15

25

16

5

12

7

6

8

9

11

23

20

27

© 2010 Goodrich, TamassiaSlide52

Heaps

52

Example (end)

4

15

25

16

5

12

7

10

6

8

9

11

23

20

27

5

15

25

16

7

12

10

4

6

8

9

11

23

20

27

© 2010 Goodrich, TamassiaSlide53

Heaps

53

Merging Two Heaps

We are given two two heaps and a key

k

We create a new heap with the root node storing

k

and with the two heaps as subtrees

We perform downheap to restore the heap-order property © 2010 Goodrich, Tamassia

3

5

8

2

6

4Slide54

Heaps

54

Merging Two Heaps

We are given two two heaps and a key

k

We create a new heap with the root node storing

k

and with the two heaps as subtrees

We perform downheap to restore the heap-order property

7

3

5

8

2

6

4

© 2010 Goodrich, Tamassia

kSlide55

Heaps

55

Merging Two Heaps

We are given two two heaps and a key

k

We create a new heap with the root node storing

k

and with the two heaps as subtrees

We perform downheap to restore the heap-order property

7

3

5

8

2

6

4

© 2010 Goodrich, Tamassia

k

MergeSlide56

Heaps

56

Merging Two Heaps

We are given two two heaps and a key

k

We create a new heap with the root node storing

k

and with the two heaps as subtrees

We perform downheap to restore the heap-order property

7

3

5

8

2

6

4

© 2010 Goodrich, Tamassia

Downheap

/

SiftDownSlide57

Heaps

57

Merging Two Heaps

We are given two two heaps and a key

k

We create a new heap with the root node storing

k

and with the two heaps as subtrees

We perform downheap to restore the heap-order property

2

3

5

8

7

6

4

© 2010 Goodrich, Tamassia

Downheap

/

SiftDownSlide58

Heaps

58

Merging Two Heaps

We are given two two heaps and a key

k

We create a new heap with the root node storing

k

and with the two heaps as subtrees

We perform downheap to restore the heap-order property

2

3

5

8

4

6

7

© 2010 Goodrich, Tamassia

Downheap

/

SiftDownSlide59

Heaps

59

Heaps and Priority Queues

We can use a heap to implement a priority queue

We store a (key, element) item at each internal node

We keep track of the position of the last node

(2, Sue)

(6, Mark)

(5, Pat)

(9, Jeff)

(7, Anna)

© 2010 Goodrich, TamassiaSlide60

60

Priority Queue as Heap

Representation as a Heap

public class

HeapPQ

<T> {

Heap<T>

pq

;

/** Creates a new instance of HeapPQ */

public HeapPQ

() { pq

= new Heap(10);

}Slide61

61

Priority Queue as Heap

Representation as a Heap

public class

HeapPQ

<T> {

Heap<T>

pq

;

/** Creates a new instance of HeapPQ */

public HeapPQ

() { pq

= new Heap(10);

}Create new heap (

maxsize=10)Slide62

62

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}Slide63

63

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Create new heap element (data/priority)Slide64

64

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Insert the element at the end of heap, and

SiftUpSlide65

65

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Each

enqueue

is inserted in the heap and Sifted Up.

This ensures the element with the lowest priority (min-heap)

or the highest priority (max-heap) is at the top of the heap (index 1).Slide66

66

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Get data of the root of the heap (index 1) and store it in eSlide67

67

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Get priority of the root of the heap (index 1)Slide68

68

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Set “

pty

” value to the root’s priority valueSlide69

69

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Copy the last node into the root (delete root)Slide70

70

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Update the size to delete last node (delete duplicate node)Slide71

71

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

SiftDown

the copied last element from the root

down the tree until it satisfies the heap conditionsSlide72

72

Priority Queue as Heap

public void

enqueue

(T e, Priority

pty

){

HeapElement<T> x = new HeapElement

<T>(e, pty);

pq.SiftUp(x);

}public

T serve(Priority pty){

T e; Priority p; e =

pq.heap[1].get_data();

p = pq.heap[1].

get_priority();

pty.set_value(

p.get_value());

pq.heap[1] = pq.heap

[pq.size];

pq.size--;

pq.SiftDown(1);

return

e;

}

Return e (the deleted root)Slide73

73

Priority Queue as Heap

public

int

length(){

return

pq.size;

}public

boolean full(){

return false;

}Slide74

74

HeapSort

Heap can be used for sorting. Two step process:

Step 1: the data is put in a heap.

Step 2: the data are extracted from the heap in sorted order.

HeapSort based on the idea that heap always has the smallest or largest element at the root.Slide75

75

ADT Heap: Implementation

//This method extracts elements in sorted order from the heap. Heap size becomes 0.

public void

HeapSort

(){

while

(size > 1){

swap(heap, 1, size); size--;

SiftDown(1);

}

//Display the sorted elements. for

(int

i = 1; i <=

maxsize; i

++){ System.out.println

(heap[i].

get_priority().get_value

()); }

}Slide76

76

ADT Heap: Implementation

//This method extracts elements in sorted order from the heap. Heap size becomes 0.

public void

HeapSort

(){

while

(size > 1){

swap(heap, 1, size); size--;

SiftDown(1);

}

//Display the sorted elements. for

(int

i = 1; i <=

maxsize; i

++){ System.out.println

(heap[i].

get_priority().get_value

()); }

}

Loop the number of elements in the arraySlide77

77

ADT Heap: Implementation

//This method extracts elements in sorted order from the heap. Heap size becomes 0.

public void

HeapSort

(){

while

(size > 1){

swap(heap, 1, size); size--;

SiftDown(1);

}

//Display the sorted elements. for

(int

i = 1; i <=

maxsize; i

++){ System.out.println

(heap[i].

get_priority().get_value

()); }

}

Swap first element (root) with last elementIn the heap array Slide78

78

ADT Heap: Implementation

//This method extracts elements in sorted order from the heap. Heap size becomes 0.

public void

HeapSort

(){

while

(size > 1){

swap(heap, 1, size); size--;

SiftDown(1);

}

//Display the sorted elements. for

(int

i = 1; i <=

maxsize; i

++){ System.out.println

(heap[i].

get_priority().get_value

()); }

}

Each time reduce the size(size define last element which will be used with swap/

SiftDown)Slide79

79

ADT Heap: Implementation

//This method extracts elements in sorted order from the heap. Heap size becomes 0.

public void

HeapSort

(){

while

(size > 1){

swap(heap, 1, size); size--;

SiftDown(1);

}

//Display the sorted elements. for

(int

i = 1; i <=

maxsize; i

++){ System.out.println

(heap[i].

get_priority().get_value

()); }

}

SiftDown the swapped element (last element) from the root

down the heap until it satisfies heap conditions.Slide80

80

ADT Heap: Implementation

//This method extracts elements in sorted order from the heap. Heap size becomes 0.

public void

HeapSort

(){

while

(size > 1){

swap(heap, 1, size); size--;

SiftDown(1);

}

//Display the sorted elements. for

(int

i = 1; i <=

maxsize; i

++){ System.out.println

(heap[i].

get_priority().get_value

()); }

}

Repeat until the entire heap array is sortedIf it is min-heap, it will be sorted in descending order

If it is max-heap, it will be sorted in ascending order Slide81

81

ADT Heap: Implementation

//This method extracts elements in sorted order from the heap. Heap size becomes 0.

public void

HeapSort

(){

while

(size > 1){

swap(heap, 1, size); size--;

SiftDown(1);

}

//Display the sorted elements. for

(int

i = 1; i <=

maxsize; i

++){ System.out.println

(heap[i].

get_priority().get_value

()); }

}

Print the sorted array(print priorities values)