leftist heaps text read weiss, §23.1 (skew heaps) leftist heap definition of null path length...

Post on 18-Dec-2015

221 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Leftist HeapsText• Read Weiss, §23.1 (Skew Heaps)

Leftist Heap• Definition of null path length• Definition of leftist heap

Building a Leftist Heap• Sequence of inserts• Re-heapification if leftist heap property is

violated

Motivation

• A binary heap provides O(log n) inserts and O(log n) deletes but suffers from O(n log n) merges

• A leftist heap offers O(log n) inserts and O(log n) deletes and O(log n) merges

• Note, however, leftist heap inserts and deletes are more expensive than Binary Heap inserts and deletes

Definition

A Leftist (min)Heap is a binary tree that satisfies the follow-ing conditions. If X is a node and L and R are its left and right children, then:

1. X.value ≤ L.value2. X.value ≤ R.value3. null path length of L ≥ null path length of R

where the null path length of a node is the shortest distance between from that node to a descendant with 0 or 1 child.If a node is null, its null path length is −1.

Example: Null Path Length

19

2027

4325

12

15

8

4

node 4 8 19 12 15 25 27 20 43

npl 1 0 1 1 0 0 0 0 0

Example: Null Path Length

19

2027

4325

12

15

8

4

node 4 8 19 12 15 25 27 20 43

npl 1 0 1 1 0 0 0 0 0

0 1

1

0

00

0 0

What are the npl’s of the children of 20 and the right child of 27?

What is the npl of the right child of 8?

Example: Null Path Length

19

2027

4325

12

15

8

4

node 4 8 19 12 15 25 27 20 43

npl 1 0 1 1 0 0 0 0 0

•node 4 violates leftist heap property fix by swapping children

0 1

1

0

00

0 0

Leftist Heap

4

node 4 8 19 12 15 25 27 20 43

npl 1 0 1 1 0 0 0 0 0

25

12

15

8 0

1

0 0

19

2027

43

1

00

0

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Consider two leftist heaps …

Task: merge them into a single leftist heap

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

First, instantiate a Stack

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Compare root nodesmerge(x,y)

x y

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Remember smaller value

4

x y

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Repeat the process with the right child of the smaller value

4

x

y

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Remember smaller value

6

4

x

y

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Repeat the process with the right child of the smaller value

6

4

x y

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Remember smaller value

7

6

4

x y

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Repeat the process with the right child of the smaller value

7

6

4

x

y

null

Merging Leftist Heaps

4

25

12

15

819

2027

43

6

78

14

Because one of the arguments is null, return the other argument

7

6

4

x

8

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Make 8 the right child of 7

7

6

4

x

8

8

7Refers to node 8

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Make 7 leftist (by swapping children)

7

6

4

8

8

7Refers to node 8

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Return node 7

6

4

7

8

7Refers to node 8

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Make 7 the right child of 6 (which it already is)

6

4

7

8

7Refers to node 8

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Make 6 leftist (it already is)

6

4

7

8

7Refers to node 8

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Return node 6

46

8

7Refers to node 8

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Make 6 the right child of 4

46

8

7

Merging Leftist Heaps

4

25

12

15

19

2027

43

6

8

14

Make 4 leftist (it already is)

46

8

7

Final Leftist Heap

4

25

12

15

19

2027

43

6

8

14

Return node 4

4

8

7

• Verify that the tree is heap

• Verify that the heap is leftist

Analysis

• Height of a leftist heap ≈ O(log n)

• Maximum number of values stored in Stack ≈ 2 * O(log n) ≈ O(log n)

• Total cost of merge ≈ O(log n)

Inserts and Deletes

• To insert a node into a leftist heap, merge the leftist heap with the node

• After deleting root X from a leftist heap, merge its left and right subheaps

• In summary, there is only one operation, a merge.

Skew HeapsText• Read Weiss, §6.7

Skew Heap• No need for null path length• Definition of skew heap

Building a Skew Heap• Sequence of inserts• Swap children at every merge step

Motivation

• Simplify leftist heap by

– not maintaining null path lengths

– swapping children at every merge step

Definition

A Skew (min)Heap is a binary tree that satisfies the follow-ing conditions. If X is a node and L and R are its left and right children, then:

1. X.value ≤ L.value2. X.value ≤ R.value

A Skew (max)Heap is a binary tree that satisfies the follow-ing conditions. If X is a node and L and R are its left and right children, then:

1. X.value ≥ L.value2. X.value ≥ R.value

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Consider two skew heaps …

Task: merge them into a single skew heap

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

First, instantiate a Stack

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Compare root nodesmerge(x,y)

x y

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Remember smaller value

4

x y

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Repeat the process with the right child of the smaller value

4

x

y

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Remember smaller value

6

4

x

y

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Repeat the process with the right child of the smaller value

6

4

x y

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Remember smaller value

7

6

4

x y

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Repeat the process with the right child of the smaller value

7

6

4

x

y

null

Merging Skew Heaps

4

25

12

15

819

2027

43

6

78

14

Because one of the arguments is null, return the other argument

7

6

4

x

8

Merging Skew Heaps

4

25

12

15

19

2027

43

6

8

14

Make 8 the right child of 7

7

6

4

x

8

8

7Refers to node 8

Merging Skew Heaps

4

25

12

15

19

2027

43

6

8

14

Swap children of node 7

7

6

4

8

8

7Refers to node 8

Merging Skew Heaps

4

25

12

15

19

2027

43

6

8

14

Return node 7

6

4

7

8

7Refers to node 8

Merging Skew Heaps

4

25

12

15

19

2027

43

6

8

14

Make 7 the right child of 6 (which it already is)

6

4

7

8

7Refers to node 8

Merging Skew Heaps

4

25

12

15

19

2027

43

6

8

14

Swap children of node 6

6

4

7

8

7Refers to node 8

Merging Skew Heaps

4

19

2027

43

Return node 6

46

Refers to node 8

25

12

15

6

8

148

7

Merging Skew Heaps

Make 6 the right child of 4

46

4

19

2027

43

25

12

15

6

8

148

7

Merging Skew Heaps

Swap children of node 4

46

4

19

2027

43

25

12

15

6

8

148

7

Final Skew Heap

Return node 4

4

• Verify that the tree is heap

• Verify that the heap is skew

4

19

2027

43

25

12

15

6

8

148

7

Analysis

• Height of a skew heap ≈ O(log n)

• Maximum number of values stored in Stack ≈ 2 * O(log n) ≈ O(log n)

• Total cost of merge ≈ O(log n)

Inserts and Deletes

• To insert a node into a skew heap, merge the leftist heap with the node

• After deleting root X from a skew heap, merge its left and right subheaps

• In summary, there is only one operation, a merge.

top related