Fibonacci Heaps
Fibonacci Heaps
Sachin Tripathi
IIT(ISM) Dhanbad
Basic idea.
Similar to binomial heaps, but less rigid structure.
Binomial heap: eagerly consolidate trees after each insert.
2
Fibonacci Heaps: Structure
17 24 23 7 3
30 26 46
18 52 41
Heap H 35
39 44
3
Fibonacci Heaps: Structure
Fibonacci heap.
Set of heap-ordered trees.
Maintain pointer to minimum element.
Set of marked nodes.
find-min takes O(1) time
min
17 24 23 7 3
30 26 46
18 52 41
Heap H 35
39 44
4
Fibonacci Heaps: Structure
Fibonacci heap.
Set of heap-ordered trees.
Maintain pointer to minimum element.
Set of marked nodes.
min
17 24 23 7 3
30 26 46
18 52 41
Heap H 35 marked
39 44
5
Fibonacci Heaps: Notation
Notation.
n = number of nodes in heap.
degree(x) or rank(x) = number of children of node x.
rank(H) = max rank of any node in heap H.
trees(H) = number of trees in heap H.
marks(H) = number of marked nodes in heap H.
17 24 23 7 3
30 26 46
18 52 41
Heap H 35 marked
39 44
6
Fibonacci Heaps: Potential Function
17 24 23 7 3
30 26 46
18 52 41
Heap H 35 marked
39 44
7
Insert
8
Fibonacci Heaps: Insert
Insert.
Create a new singleton tree.
Add to root list; update min pointer (if necessary).
insert 21
21
min
17 24 23 7 3
30 26 46
18 52 41
Heap H 35
39 44
9
Fibonacci Heaps: Insert
Insert.
Create a new singleton tree.
Add to root list; update min pointer (if necessary).
insert 21
min
17 24 23 7 21 3
30 26 46
18 52 41
Heap H 35
39 44
10
Fibonacci Heaps: Insert Analysis
min
17 24 23 7 21 3
30 26 46
18 52 41
Heap H 35
39 44
11
Delete Min
12
Linking Operation
15 3 3
56 24 18 52 41 15 18 52 41
77 39 44 56 24 39 44
tree T1 tree T2
77
tree T'
13
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
min
7 24 23 17 3
30 26 46 18 52 41
35 39 44
14
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
min
7 24 23 17 18 52 41
30 26 46 39 44
35
15
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
min
current
7 24 23 17 18 52 41
30 26 46 39 44
35
16
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
min
current
7 24 23 17 18 52 41
30 26 46 39 44
35
17
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
min
current
7 24 23 17 18 52 41
30 26 46 39 44
35
18
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
min
7 24 23 17 18 52 41
30 26 46 current 39 44
35
19
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
min
7 24 23 17 18 52 41
30 26 46 current 39 44
35
link 23 into 17
20
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
min
7 24 17 18 52 41
30 26 46 current 23 39 44
35
link 17 into 7
21
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
current
min
24 7 18 52 41
26 46 17 30 39 44
35 23
link 24 into 7
22
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
current
min
7 18 52 41
24 17 30 39 44
26 46 23
35
23
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
current
min
7 18 52 41
24 17 30 39 44
26 46 23
35
24
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
current
min
7 18 52 41
24 17 30 39 44
26 46 23
35
25
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
current
min
7 18 52 41
24 17 30 39 44
26 46 23
link 41 into 18
35
26
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
current
min
7 52 18
24 17 30 41 39
26 46 23 44
35
27
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
rank
0 1 2 3
current
min
7 52 18
24 17 30 41 39
26 46 23 44
35
28
Fibonacci Heaps: Delete Min
Delete min.
Delete min; meld its children into root list; update min.
Consolidate trees so that no two roots have same rank.
min
7 52 18
24 17 30 41 39
26 46 23 44
stop
35
29
Decrease Key
30
Fibonacci Heaps: Decrease Key
min
7 18 38
marked node:
one child already cut
24 17 23 21 39 41
26 46 30 52
35 88 72
31
Fibonacci Heaps: Decrease Key
min
7 18 38
24 17 23 21 39 41
26 46
29 30 52
x
decrease-key of x from 46 to 29
35 88 72
32
Fibonacci Heaps: Decrease Key
min
7 18 38
24 17 23 21 39 41
26 29 30 52
x
decrease-key of x from 46 to 29
35 88 72
33
Fibonacci Heaps: Decrease Key
min
7 18 38
24 17 23 21 39 41
p
26 29
15 30 52
x
decrease-key of x from 29 to 15
35 88 72
34
Fibonacci Heaps: Decrease Key
min
7 18 38
24 17 23 21 39 41
p
26 15 30 52
x
decrease-key of x from 29 to 15
35 88 72
35
Fibonacci Heaps: Decrease Key
x min
15 7 18 38
72 24 17 23 21 39 41
p
26 30 52
decrease-key of x from 29 to 15
35 88
36
Fibonacci Heaps: Decrease Key
x min
15 7 18 38
72 24 17 23 21 39 41
p
mark parent
26 30 52
decrease-key of x from 29 to 15
35 88
37
Fibonacci Heaps: Decrease Key
min
15 7 18 38
72 24 17 23 21 39 41
p 26 30 52
decrease-key of x from 35 to 5
x 35
5 88
38
Fibonacci Heaps: Decrease Key
min
15 7 18 38
72 24 17 23 21 39 41
p 26 30 52
decrease-key of x from 35 to 5
x 5 88
39
Fibonacci Heaps: Decrease Key
min
x
15 5 7 18 38
72 24 17 23 21 39 41
p 26 30 52
decrease-key of x from 35 to 5
88
40
Fibonacci Heaps: Decrease Key
min
x
15 5 7 18 38
p 26 30 52
decrease-key of x from 35 to 5
88
41
Fibonacci Heaps: Decrease Key
min
x p
15 5 26 7 18 38
72 88 24 17 23 21 39 41
30 52
decrease-key of x from 35 to 5
42
Fibonacci Heaps: Decrease Key
min
x p
15 5 26 7 18 38
72 88 p' 24 17 23 21 39 41
decrease-key of x from 35 to 5
43
Fibonacci Heaps: Decrease Key
min
x p p' p''
15 5 26 24 7 18 38
72 88 don't mark 17 23 21 39 41
parent if
it's a root
30 52
decrease-key of x from 35 to 5
44
Fibonacci Heaps: Bounding the Rank
Lemma. Fix a point in time. Let x be a node, and let y1, …, yk denote
its children in the order in which they were linked to x. Then:
x
0 if i 1
rank (yi )
i 2 if i 1
y1 y2 … yk
Def. Let Fk be smallest possible tree of rank k satisfying property.
F0 F1 F2 F3 F4 F5
1 2 3 5 8 13
45
Fibonacci Heaps: Bounding the Rank
Lemma. Fix a point in time. Let x be a node, and let y1, …, yk denote
its children in the order in which they were linked to x. Then:
x
0 if i 1
rank (yi )
i 2 if i 1
y1 y2 … yk
Def. Let Fk be smallest possible tree of rank k satisfying property.
F4 F5 F6
8 13 8 + 13 = 21
46