Você está na página 1de 52

Leftist Heaps

Text

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 following conditions. If X is a node and L and R are its left and
right children, then:
1. X.value L.value
2. X.value R.value
3. 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


4
8

19

12

27

15

25

20

43

node

19

12

15

25

27

20

43

npl

Example: Null Path Length


4
8
12
15

27

19

0
What is the npl of the
right child of 8?

25

43

20

What are the npls of


the children of 20 and
the right child of 27?

node

19

12

15

25

27

20

43

npl

Example: Null Path Length


4
8
12
15

node 4 violates leftist heap property


fix by swapping children

19

27

25

43

20

node

19

12

15

25

27

20

43

npl

Leftist Heap
4
19
27
43

20

12

15

25

node

19

12

15

25

27

20

43

npl

Merging Leftist Heaps


Consider two leftist heaps
4

6
8

19
27
43

12

20
15

8
14

25

Task: merge them into a single leftist heap

Merging Leftist Heaps


4

6
8

19
27
43

12

20
15

14
25

First, instantiate a Stack

Merging Leftist Heaps


x

6
8

19
27
43

12

20
15

14
25

Compare root nodes


merge(x,y)

Merging Leftist Heaps


x

6
8

19
27
43

12

20
15

14
25

Remember smaller value

Merging Leftist Heaps


y
4
8

19
27
43

x
12

20
15

14
25

Repeat the process with the right


child of the smaller value

Merging Leftist Heaps


y
4
8

19
27
43

x
12

20
15

14
25

6
4

Remember smaller value

Merging Leftist Heaps


4
8

19
27
43

x
12

20
15

y
7

14
25

6
4

Repeat the process with the right


child of the smaller value

Merging Leftist Heaps


4
8

19
27
43

x
12

20
15

y
7

14
25

7
6
4

Remember smaller value

Merging Leftist Heaps


4
8

19
27
43

x
12

20
15

8
14

25

y
null
7
6
4

Repeat the process with the right


child of the smaller value

Merging Leftist Heaps


4
8

19
27
43

x
12

20
15

14
25

7
6
4

Because one of the arguments is


null, return the other argument

Merging Leftist Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

8
7
6
4

Make 8 the right child of 7

Merging Leftist Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

8
7
6
4

Make 7 leftist (by swapping children)

Merging Leftist Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

Return node 7

Merging Leftist Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

Make 7 the right child of 6


(which it already is)

Merging Leftist Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

Make 6 leftist (it already is)

Merging Leftist Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

Return node 6

Merging Leftist Heaps


4
6

19
27
43

20

7
8

14
12
15

25

Make 6 the right child of 4

Merging Leftist Heaps


4
6

19
27
43

20

7
8

14
12
15

25

Make 4 leftist (it already is)

Final Leftist Heap


4
6

19
27
43

20

7
8

14
12
15

25

Verify that the tree is heap


Verify that the heap is leftist

Return node 4

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 Heaps
Text

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.
2.

X.value L.value
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.
2.

X.value L.value
X.value R.value

Merging Skew Heaps


Consider two skew heaps
4

6
8

19
27
43

12

20
15

8
14

25

Task: merge them into a single skew heap

Merging Skew Heaps


4

6
8

19
27
43

12

20
15

14
25

First, instantiate a Stack

Merging Skew Heaps


x

6
8

19
27
43

12

20
15

14
25

Compare root nodes


merge(x,y)

Merging Skew Heaps


x

6
8

19
27
43

12

20
15

14
25

Remember smaller value

Merging Skew Heaps


y
4
8

19
27
43

x
12

20
15

14
25

Repeat the process with the right


child of the smaller value

Merging Skew Heaps


y
4
8

19
27
43

x
12

20
15

14
25

6
4

Remember smaller value

Merging Skew Heaps


4
8

19
27
43

x
12

20
15

y
7

14
25

6
4

Repeat the process with the right


child of the smaller value

Merging Skew Heaps


4
8

19
27
43

x
12

20
15

y
7

14
25

7
6
4

Remember smaller value

Merging Skew Heaps


4
8

19
27
43

x
12

20
15

8
14

25

y
null
7
6
4

Repeat the process with the right


child of the smaller value

Merging Skew Heaps


4
8

19
27
43

x
12

20
15

14
25

7
6
4

Because one of the arguments is


null, return the other argument

Merging Skew Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

8
7
6
4

Make 8 the right child of 7

Merging Skew Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

8
7
6
4

Swap children of node 7

Merging Skew Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

Return node 7

Merging Skew Heaps


4
19
27

6
8

Refers to node 8
20

7
8

14
12

43
15

25

Make 7 the right child of 6


(which it already is)

Merging Skew Heaps


4
19
27

6
7

Refers to node 8
8

20

8
14

12

43
15

25

Swap children of node 6

Merging Skew Heaps


4
19
27

6
7

Refers to node 8
8

20

8
14

12

43
15

25

Return node 6

Merging Skew Heaps


4
6

19
27

20
8

43

8
14

12
15

25

Make 6 the right child of 4

Merging Skew Heaps


4
19

6
7
8

27

8
14

20

43

12
15

25

Swap children of node 4

Final Skew Heap


4
19

6
7
8

27

8
14

20

43

12
15

25

Verify that the tree is heap


Verify that the heap is skew

Return node 4

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.

Você também pode gostar