52
Initializing A Max Heap input array = [-, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] 8 4 7 6 7 8 9 3 7 10 1 11 5 2

Lec24

Embed Size (px)

Citation preview

Page 1: Lec24

Initializing A Max Heap

input array = [-, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

8

4

7

6 7

8 9

3

710

1

11

5

2

Page 2: Lec24

Initializing A Max Heap

Start at rightmost array position that has a child.

8

4

7

6 7

8 9

3

710

1

11

5

2

Index is n/2.

Page 3: Lec24

Initializing A Max Heap

Move to next lower array position.

8

4

7

6 7

8 9

3

710

1

5

11

2

Page 4: Lec24

Initializing A Max Heap

8

4

7

6 7

8 9

3

710

1

5

11

2

Page 5: Lec24

Initializing A Max Heap

8

9

7

6 7

8 4

3

710

1

5

11

2

Page 6: Lec24

Initializing A Max Heap

8

9

7

6 7

8 4

3

710

1

5

11

2

Page 7: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

710

1

5

11

2

Page 8: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

710

1

5

11

2

Page 9: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

710

1

5

11

Find a home for 2.

Page 10: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

75

1

11

Find a home for 2.

10

Page 11: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

72

1

11

Done, move to next lower array position.

10

5

Page 12: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

72

1

11

10

5

Find home for 1.

Page 13: Lec24

11

Initializing A Max Heap

8

9

7

6 3

8 4

7

72

10

5

Find home for 1.

Page 14: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

72

11

10

5

Find home for 1.

Page 15: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

72

11

10

5

Find home for 1.

Page 16: Lec24

Initializing A Max Heap

8

9

7

6 3

8 4

7

72

11

10

5

Done.

1

Page 17: Lec24

Time Complexity

87

6 3

4

7

710

11

5

2

9

8

1

Height of heap = h.

Number of subtrees with root at level j is <= 2 j-1.

Time for each subtree is O(h-j+1).

Page 18: Lec24

Complexity

Time for level j subtrees is <= 2j-1(h-j+1) = t(j).

Total time is t(1) + t(2) + … + t(h-1) = O(n).

Page 19: Lec24

Leftist Trees

Linked binary tree.

Can do everything a heap can do and in the same asymptotic complexity.

Can meld two leftist tree priority queues in O(log n) time.

Page 20: Lec24

Extended Binary Trees

Start with any binary tree and add an external node wherever there is an empty subtree.

Result is an extended binary tree.

Page 21: Lec24

A Binary Tree

Page 22: Lec24

An Extended Binary Tree

number of external nodes is n+1

Page 23: Lec24

The Function s()

For any node x in an extended binary tree, let s(x) be the length of a shortest path from x to an external node in the subtree rooted at x.

Page 24: Lec24

s() Values Example

Page 25: Lec24

s() Values Example

0 0 0 0

0 0

0 0

0

0

1 1 1

2 1 1

2 1

2

Page 26: Lec24

Properties Of s()

If x is an external node, then s(x) = 0.

Otherwise,s(x) = min {s(leftChild(x)),

s(rightChild(x))} + 1

Page 27: Lec24

Height Biased Leftist Trees

A binary tree is a (height biased) leftist tree iff for every internal node x, s(leftChild(x)) >= s(rightChild(x))

Page 28: Lec24

A Leftist Tree

0 0 0 0

0 0

0 0

0

0

1 1 1

2 1 1

2 1

2

Page 29: Lec24

Leftist Trees--Property 1

In a leftist tree, the rightmost path is a shortest root to external node path and the length of this path is s(root).

Page 30: Lec24

A Leftist Tree

0 0 0 0

0 0

0 0

0

0

1 1 1

2 1 1

2 1

2

Length of rightmost path is 2.

Page 31: Lec24

Leftist Trees—Property 2

The number of internal nodes is at least2s(root) - 1

Because levels 1 through s(root) have no external nodes.

So, s(root) <= log(n+1)

Page 32: Lec24

A Leftist Tree

0 0 0 0

0 0

0 0

0

0

1 1 1

2 1 1

2 1

2

Levels 1 and 2 have no external nodes.

Page 33: Lec24

Leftist Trees—Property 3

Length of rightmost path is O(log n), where n is the number of nodes in a leftist tree.

Follows from Properties 1 and 2.

Page 34: Lec24

Leftist Trees As Priority Queues

Min leftist tree … leftist tree that is a min tree.

Used as a min priority queue.

Max leftist tree … leftist tree that is a max tree.

Used as a max priority queue.

Page 35: Lec24

A Min Leftist Tree

8 6 9

6 8 5

4 3

2

Page 36: Lec24

Some Min Leftist Tree Operations

put()

remove()

meld()

initialize()

put() and remove() use meld().

Page 37: Lec24

Put Operation

put(7)

8 6 9

6 8 5

4 3

2

Page 38: Lec24

Put Operation

put(7)

8 6 9

6 8 5

4 3

2

Create a single node min leftist tree. 7

Page 39: Lec24

Put Operation

put(7)

8 6 9

6 8 5

4 3

2

Create a single node min leftist tree.

Meld the two min leftist trees.

7

Page 40: Lec24

Remove Min

8 6 9

6 8 5

4 3

2

Page 41: Lec24

Remove Min

8 6 9

6 8 5

4 3

2

Remove the root.

Page 42: Lec24

Remove Min

8 6 9

6 8 5

4 3

2

Remove the root.

Meld the two subtrees.

Page 43: Lec24

Meld Two Min Leftist Trees

8 6 9

6 8 5

4 3

6

Traverse only the rightmost paths so as to get logarithmic performance.

Page 44: Lec24

Meld Two Min Leftist Trees

8 6 9

6 8 5

4 3

6

Meld right subtree of tree with smaller root and all of other tree.

Page 45: Lec24

Meld Two Min Leftist Trees

8 6 9

6 8 5

4 3

6

Meld right subtree of tree with smaller root and all of other tree.

Page 46: Lec24

Meld Two Min Leftist Trees

8 6

6 8

4 6

Meld right subtree of tree with smaller root and all of other tree.

Page 47: Lec24

Meld Two Min Leftist Trees

8 6

Meld right subtree of tree with smaller root and all of other tree.

Right subtree of 6 is empty. So, result of melding right subtree of tree with smaller root and other tree is the other tree.

Page 48: Lec24

Meld Two Min Leftist Trees

Swap left and right subtree if s(left) < s(right).

Make melded subtree right subtree of smaller root.

8 6

6

8

6

8

Page 49: Lec24

Meld Two Min Leftist Trees

8 6

6 6

4

88 6

6

46

8

Make melded subtree right subtree of smaller root.

Swap left and right subtree if s(left) < s(right).

Page 50: Lec24

Meld Two Min Leftist Trees

9

5

3

Swap left and right subtree if s(left) < s(right).

Make melded subtree right subtree of smaller root.

8 6

6 6

4

8

Page 51: Lec24

Meld Two Min Leftist Trees

9

5

3

8 6

6 6

4

8

Page 52: Lec24

Initializing In O(n) Time• create n single node min leftist trees

and place them in a FIFO queue

• repeatedly remove two min leftist trees from the FIFO queue, meld them, and put the resulting min leftist tree into the FIFO queue

• the process terminates when only 1 min leftist tree remains in the FIFO queue

• analysis is the same as for heap initialization