fibonacci-heap
fibonacci-heap
Basic idea.
Similar to binomial heaps, but less rigid structure.
Binomial heap: eagerly consolidate trees after each insert.
Fibonacci heap: lazily defer consolidation until next
delete-min.
1
Fibonacci Heaps: Structure
17 24 23 7 3
30 26 46
18 52 41
Heap H 35
39 44
2
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
3
Fibonacci Heaps: Structure
Fibonacci heap.
Set of heap-ordered trees.
Maintain pointer to minimum element.
Set of marked nodes.
use to keep heaps flat (stay tuned)
min
17 24 23 7 3
30 26 46
18 52 41
Heap H 35 marked
39 44
4
Fibonacci Heaps: Notation
Notation.
n = number of nodes in heap.
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
5
Fibonacci Heaps: Potential Function
(H) = trees(H) + 2
marks(H) potential of heap H
17 24 23 7 3
30 26 46
18 52 41
Heap H 35 marked
39 44
6
Insert
7
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
8
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
9
Fibonacci Heaps: Insert Analysis
min
17 24 23 7 21 3
30 26 46
18 52 41
Heap H 35
39 44
10
Delete Min
11
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'
12
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
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 18 52 41
30 26 46 39 44
35
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
current
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
rank.
0 1 2 3
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
7 24 23 17 18 52 41
30 26 46 current 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
link 23 into 17
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 17 18 52 41
30 26 46 current 23 39 44
35
link 17 into 7
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
current
min
24 7 18 52 41
26 46 17 30 39 44
35 23
link 24 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
7 18 52 41
24 17 30 39 44
26 46 23
35
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
link 41 into 18
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 52 18
24 17 30 41 39
26 46 23 44
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.
min
7 52 18
24 17 30 41 39
26 46 23 44
stop
35
28
Fibonacci Heaps: Delete Min Analysis
Delete min.
(H) = trees(H) + 2
marks(H)potential function
29
Fibonacci Heaps: Delete Min Analysis
B0 B1 B2 B3
30
Fibonacci Heaps: Decrease Key
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
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
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
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
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
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
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
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
15 5 7 18 38
p 26 30 52
decrease-key of x from 35 to 5
88
41
Fibonacci Heaps: Decrease Key
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
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
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: Decrease Key Analysis
Decrease-key.
(H) = trees(H) + 2
marks(H)potential function
45