skew heaps advanced)

61
NUCES-FAST Advanced Data Structures Spring 2007 Skew Heaps Rabea Aden

Upload: api-3801329

Post on 14-Nov-2014

164 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Skew Heaps

Rabea Aden

Page 2: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Leftist Tree

• Invented by Daniel Sleator and Robert Trajan

• A self-adjusting heap similar to Leftist Heaps

• No structural constraint

• Amortized time complexity of O(log n)

Page 3: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Heap-order Property

• Min Leftist Heap

• Max Leftist Heap

(X))key(Parent key(X) Heap X

(X))key(Parent key(X) Heap X

If X is root Parent (X) = root

Page 4: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Structure of a Node

No balance information is stored in the node

DataLeft

PointerRight

Pointer

Page 5: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Operations

• BuildHeap O(N)

• FindMin O(1)

• Merge O(log N)

• Insert O(log N)

• DeleteMin O(log N)

Page 6: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

ld(X))w(rightChi d(X))w(leftChil 1 w(X)

Weight

• denoted by w(X)• Number of internal nodes in subtree with root X

Page 7: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Heavy and Light Nodes

• X — a nonroot node

• X is heavy if

• X is light if

2/))X(Parent(w)X(w

2/))X(Parent(w)X(w

Page 8: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Potential Function

Page 9: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

General Idea

• All insertions and merges are performed on the rightmost path containing at most nodes

1)(nlog2

Page 10: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Merge

• O(log N) time

• It is a fundamental operation– Both Insert and DeleteMin are based on Merge– Insert:

• The key to be inserted is a one-node heap• Merge this one-node heap with the given min leftist heap

– DeleteMin• Delete root, left and right child of root are two min leftist heaps• Merge the two min leftist heaps

Page 11: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Merge Algorithm (Recursive)Merge(H1, H2)

If both heaps are Leftist

If one heap is NULL then return the other

If data(H1) > data(H1) then swap H1 and H2

If rightChild(H1) is NULL then rightChild(H1) = H2

Otherwise,

Recursively Merge rightChild(H1) and H2

If H1 ≠ last node on Rightmost Path then swap children of H1

Page 12: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12 16 36

8

1

5

6

40

H1

Merge H1 & H2

Both H1 and H2 are Min Leftist Heaps

2

14

4

10

28 25

2218

7

H2

Page 13: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12 16 36

8

1

5

6

40

H1

12 16 36

8

1

5

6

40

H1

2

14

4

10

28 25

2218

7

H2

2

14

4

10

28 25

2218

7

H2

Merge (H1, H2)

Compare root(H1) '1' & root(H2) '2' — H1 has smaller root

Both H1 and H2 are not NULL

Merge H1 & H2

Page 14: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12 16 36

8

1

5

6

40

12 16 36

8

1

5

6

40

H1H1

2

14

4

10

28 25

2218

7

H2

Merge H1 & H2

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild

H1

Page 15: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

2

14

4

10

28 25

2218

7

2

14

4

10

28 25

2218

7

Merge H1 & H2

Merge (H1, H2)

Compare root(H1) '8' & root(H2) '2' — H2 has smaller root swap(H1, H2)

Now, root(H1) = '2' & root(H2) = '8'

H1

12

1

5

6 16 36

8

40

Both H1 and H2 are not NULL

H2

Page 16: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10

28 25

2218

712

1

5

6

2

14

4

10

29 26

2218

7

Merge H1 & H2

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild

H2

16 36

8

4012

1

5

6

H1

Page 17: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10

28 25

2218

7

Merge H1 & H2

Merge (H1, H2)

Compare root(H1) '7' & root(H2) '8' — H1 has smaller root

H2

16 36

8

40

Both H1 and H2 are not NULL

H1

Page 18: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10

28 25

2218

712

1

5

6

2

14

4

10

28 25

2218

7

Merge H1 & H2

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild

H2

16 36

8

40

H1

Page 19: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10

28

18

7

Merge H1 & H2

Merge (H1, H2)

Compare root(H1) '22' & root(H2) '8' — H2 has smaller root swap(H1, H2)

Now, root(H1) = '8' & root(H2) = '23'

1737941

Both H1 and H2 are not NULL

25

22

H2

16 36

8

40H112

1

5

6

2

14

4

10 18

7

16 36

8

40

28

Page 20: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10 18

7

16 36

8

40

28

12

1

5

6

2

14

4

10 18

7

16 36

8

40

28

Merge H1 & H2

1737941

H2

25

22

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild

H1

Page 21: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Merge H1 & H2

1737941

H2

25

22

Merge (H1, H2)

Compare root(H1) '36' & root(H2) '22' — H2 has smaller root swap(H1, H2)

Now, root(H1) = '22' & root(H2) = '36'

Both H1 and H2 are not NULL

12

1

5

6

2

14

4

10 18

7

16

8

28 36

40

H1

Page 22: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10 18

7

16 22

8

25

28

36

40

12

1

5

6

2

14

4

10 18

7

16 22

8

25

28

Merge H1 & H2

Since, rightChild(H1) is NULL rightChild(H1) = H2

1737941

H2

NULL

H1

Page 23: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10 18

7

16 22

8

25

28

36

40

Merge H1 & H2

NULL

H1 is NULL

H1

H2

Merge (H1, H2)

Since root(H1) is 'NULL' swap(H1, H2)

Now, root(H1) = '36' & root(H2) = 'NULL'

Page 24: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10 18

7

16 22

8

25

28

36

40

Merge H1 & H2

NULL

H2

H2 is NULL

H1

NULL

rightChild(H1) is NULL

12

1

5

6

2

14

4

10 18

7

16 22

8

25

28

36

40

Swap children of each nodeon the Rightmost Path

except the last node

Page 25: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10 18

7

16 22

8

36

28

25

40

12

1

5

6

2

14

4

10 18

7

16 22

8

25

28

36

40

H1 moves up to '22'

Merge H1 & H2swap( leftChild(H1), rightChild(H1) )

12

1

5

6

2

14

4

10 18

7

16 22

8

28

36

40

25

H1

Page 26: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10 18

7

16 22

8

36

28

25

40

12

1

5

6

2

14

4

10 18

7

8

28

H1 moves up to '8'

Merge H1 & H2swap( leftChild(H1), rightChild(H1) )

H1

22

36 25

40

16

Page 27: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

2

14

4

10 18

7

22 16

8

36

28

25

40

12

1

5

6

2

14

4

10

7 H1 moves up to '7'

Merge H1 & H2swap( leftChild(H1), rightChild(H1) )

H1

18

28 22 16

8

36 25

40

Page 28: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

16

12

1

5

6

2

14

4

10 8

7

28

18

36

22

25

40

16

12

1

5

6

2

7

8

4

28

18

36

22

25

40

14 10

H1 moves up to '2'

Merge H1 & H2swap( leftChild(H1), rightChild(H1) )

H1

14

4

10

16

8

7

28

18

36

22

25

40

12

1

5

6

2

Page 29: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

16

1

2 5

7

8

4

28

18

36

22

25

40

14 10

126

16

12

1

5

6

2

7

8

4

28

18

36

22

25

40

14 10

H1 moves up to '1'

Merge H1 & H2swap( leftChild(H1), rightChild(H1) )

1

H1

12

5

6

16

2

7

8

4

28

18

36

22

25

40

14 10

H1

Page 30: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

16

1

2 5

7

8

4

28

18

36

22

25

40

14 10

126

Merge H1 & H2H1

16

1

2 5

7

8

4

28

18

36

22

25

40

14 10

126 H1 is returned Root pointer now points to H1

Root

Page 31: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Merge Algorithm (Iterative)

Merge(H1, H2)

Pass 1 — Down the HeapSort nodes on rightmost paths of H1 and H2 in ascending order (leftChild of each node remains)A new tree H is created by merging the sorted nodes

Pass 2 — Up the Heap nodes X Є rightmost path of H from leaf to the root

If X ≠ last node on rightmost path then then swap children of X

Page 32: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Time Complexity of Merge

• O(log n)

• As only shortest path is traversed

Page 33: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Insert

• O(log N) time

Insert is based on Merge

Existing min leftist heap — H1 The key to be inserted is a one-node heap — H2 Merge this one-node heap H1 with the given min

leftist heap H2

Page 34: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12 16 36

8

1

5

6

40

H1

Insert 2

H1 — existing HeapH2 — one-node heap containing node to be inserted

Both H1 and H2 are Min Leftist Heaps

2

H2

Page 35: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12 16 36

8

1

5

6

400

H1

12 16 36

8

1

5

6

40

H1

Insert 2

30

H2

2

H2

Both H1 and H2 are not NULL

Merge (H1, H2)

Compare root(H1) '1' & root(H2) '2' — H1 has smaller root

Page 36: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Insert 2

12 16 36

8

1

5

6

40

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild

H1

H1 2

H2

Page 37: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Insert 2

H1

12

1

5

6

Merge (H1, H2)

Compare root(H1) '8' & root(H2) '2' — H2 has smaller root swap(H1, H2)

Now, root(H1) = '2' & root(H2) = '8'

Both H1 and H2 are not NULL2

H2

16 36

8

40

Page 38: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

1

5

6

Insert 2

2

H1

Since, rightChild(H1) == NULL rightChild(H1) = H2

16 36

8

40

H2

NULL12

2

1

5

6

16 36

8

40

Page 39: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild '36'

12

2

1

5

6

16 36

8

40

Insert 2

H1

H2

NULL

H2 is NULL

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild '8'

H1

12

2

1

5

6

16 36

8

40

H1

NULL

rightChild(H1) is NULL

Swap children of each nodeon the Rightmost Path

except the last node

12

2

1

5

6

16 36

8

40

H1

Page 40: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

2

1

5

6

36 16

8

40

12

2

1

5

6

16 36

8

40

Insert 2

H1 H1 moves up to '8'

swap( leftChild(H1), rightChild(H1) )

12

2

1

5

6 8

16 36

40

Page 41: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

2

1

5

6

36 16

8

40

12

2

1

5

6

36 16

8

40

Insert 2

H1 moves up to '2'

swap( leftChild(H1), rightChild(H1) )

36 16

8

40

12

2

1

5

6 NULL

H1

Page 42: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

5

1

2

36 16

8

40

12612

2

1

5

6

36 16

8

40

Insert 2

H1 moves up to '1'

swap( leftChild(H1), rightChild(H1) )

H1

NULL

1

12

5

6

2

36 16

8

40

Page 43: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

5

1

2

36 16

8

40

126

Insert 2H1

H1 is returned Root pointer now points to H1

Root

5

1

2

36 16

8

40

126

Page 44: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Time Complexity of Insert

• O(log n)

• Create a one-node heap — O(1)• Merge — O(log n)

– As only shortest path is traversed

Page 45: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

DeleteMin

• O(log N) time

DeleteMin is based on Merge

Delete root — (minimum value is in root) Left and right children of root are two min

leftist heaps — H1 and H2 respectively Merge the two min leftist heaps H1 and H2

Page 46: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

DeleteMin

130

170

370

91

22

61

70

410

Root

Delete Minimum Key '2'

12 16 36

8

1

5

6

40

Page 47: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

1

DeleteMin

Save old value of rootH1 = root→leftChildH2 = root→rightChild

12

5

6 16 36

8

40

H1 H2

RootoldRoot

1

Page 48: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

16 36

8

40

13

6

7 12

5

6

1

DeleteMin

16 36

8

41

H1 H2

Merge (H1, H2)

Compare root(H1) '5' & root(H2) '8' — H1 has smaller root

Both H1 and H2 are not NULL

oldRoot

Page 49: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12

5

6 12

5

6

DeleteMin

H1 H2

oldRoot

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild

H1

16 36

8

40

1

Page 50: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

DeleteMin

H2

oldRoot

H1

16 36

8

40

Both H1 and H2 are not NULL5

6 12

Merge (H1, H2)

Compare root(H1) '8' & root(H2) '2' — H2 has smaller root swap(H1, H2)

Now, root(H1) = '2' & root(H2) = '8'

1

Page 51: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

16 36

8

5

6

40

16 36

8

5

6

40

DeleteMin

H2

oldRoot

H1 12

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild

1

Page 52: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

DeleteMin

H2

oldRoot

12

H1

Merge (H1, H2)

Compare root(H1) '36' & root(H2) '12' — H2 has smaller root swap(H1, H2)

Now, root(H1) = '36' & root(H2) = '12'

170

8

5

6

36

40

Both H1 and H2 are not NULL

1

Page 53: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

36

40

DeleteMin

H2

oldRoot

H1

1

16 12

8

5

6

36

40rightChild(H1) is NULL

Page 54: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

NULL

DeleteMin

H2

oldRoot

H1

16

8

5

6

Since, rightChild(H1) == NULL rightChild(H1) = H2

12

1

16 12

8

5

6

36

40

NULL36

40

Page 55: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

16 12

8

5

6

36

40

16 12

8

5

6

36

40

DeleteMin

H2

oldRoot

H1

1

NULL

H2 is NULL

NULL

Swap children of each nodeon the Rightmost Path

except the last node

Since, rightChild(H1) ≠ NULL H1 now points to its rightChild '36'

rightChild(H1) is NULL

Page 56: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

NULL

16 12

8

5

6

36

40

DeleteMinoldRoot

1

16 12

8

5

6

36

40

H1

H1 moves up to '12'

swap( leftChild(H1), rightChild(H1) )

16 12

8

5

6

36

40

NULL

Page 57: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12 16

8

5

6

36

40

NULL

16 12

8

5

6

36

40

DeleteMinoldRoot

1

H1 moves up to '8'

swap( leftChild(H1), rightChild(H1) )

H18

5

6

16 12

36

40

Page 58: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

12 16

8

5

6

36

40

DeleteMinoldRoot

1

H1 moves up to '5'

swap( leftChild(H1), rightChild(H1) )

H1

12 16

6

5

8

36

40

5

12 16

8

36

40

6

Page 59: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

DeleteMinoldRoot

1H1

12 16

6

5

8

36

40

H1 is returned Root pointer now points to H1

Root

12 16

6

5

8

36

40

Delete old Root

Page 60: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Time Complexity of DeleteMin

• O(log n)

• Delete root — O(1)• Initialize H1 with left child of root — O(1)• Initialize H2 with right child of root — O(1)• Merge — O(log n)

– As only shortest path is traversed

Page 61: Skew Heaps Advanced)

NUCES-FAST • Advanced Data Structures • Spring 2007

Leftist Heaps vs Skew Heaps

• More space• Explicit structural

constraints guarantees efficiency

• Less space• No structural

constraint guarantees efficiency

• Easier to implement