Princeton University COS 423 Theory of Algorithms Spring 2002 Kevin Wayne
Fibonacci Heaps
These lecture slides are adapted
from CLRS, Chapter 20.
2
Priority Queues
make-heap
Operation
insert
find-min
delete-min
union
decrease-key
delete
1
Binary
log N
1
log N
N
log N
log N
1
Binomial
log N
log N
log N
log N
log N
log N
1
Fibonacci
1
1
log N
1
1
log N
1
Relaxed
1
1
log N
1
1
log N
1
Linked List
1
N
N
1
1
N
is-empty
1 1 1 1 1
Heaps
this time
amortized
3
Fibonacci Heaps
Fibonacci heap history. Fredman and Tarjan (1986)
Ingenious data structure and analysis.
Original motivation: O(m + n log n) shortest path algorithm.
also led to faster algorithms for MST, weighted bipartite matching
Still ahead of its time.
Fibonacci heap intuition.
Similar to binomial heaps, but less structured.
Decrease-key and union run in O(1) time.
"Lazy" unions.
4
Fibonacci Heaps: Structure
Fibonacci heap.
Set of min-heap ordered trees.
7 23
30
17
35
26 46
24
H 39
41 18 52
3
44
min
marked
5
Fibonacci Heaps: Implementation
Implementation.
Represent trees using left-child, right sibling pointers and circular,
doubly linked list.
can quickly splice off subtrees
Roots of trees connected with circular doubly linked list.
fast union
Pointer to root of tree with min element.
fast find-min
7 23
30
17
35
26 46
24
H 39
41 18 52
3
44
min
6
Fibonacci Heaps: Potential Function
Key quantities.
Degree[x] = degree of node x.
Mark[x] = mark of node x (black or gray).
t(H) = # trees.
m(H) = # marked nodes.
u(H) = t(H) + 2m(H) = potential function.
7 23
30
17
35
26 46
24
H
t(H) = 5, m(H) = 3
u(H) = 11
39
41 18 52
3
44
min degree = 3
7
Fibonacci Heaps: Insert
Insert.
Create a new singleton tree.
Add to left of min pointer.
Update min pointer.
7 23
30
17
35
26 46
24
H 39
41 18 52
3
44
min
21
Insert 21
8
Fibonacci Heaps: Insert
Insert.
Create a new singleton tree.
Add to left of min pointer.
Update min pointer.
39
41
7 23
18 52
3
30
17
35
26 46
24
44
min
H
21
Insert 21
9
Fibonacci Heaps: Insert
Insert.
Create a new singleton tree.
Add to left of min pointer.
Update min pointer.
Running time. O(1) amortized
Actual cost = O(1).
Change in potential = +1.
Amortized cost = O(1).
39
41
7
18 52
3
30
17
35
26 46
24
44
min
H
21 23
Insert 21
10
Fibonacci Heaps: Union
Union.
Concatenate two Fibonacci heaps.
Root lists are circular, doubly linked lists.
39
41
7 17
18 52
3
30
23
35
26 46
24
44
min
H' H''
21
min
11
Fibonacci Heaps: Union
Union.
Concatenate two Fibonacci heaps.
Root lists are circular, doubly linked lists.
Running time. O(1) amortized
Actual cost = O(1).
Change in potential = 0.
Amortized cost = O(1).
39
41
7 17
18 52
3
30
23
35
26 46
24
44
min
H' H''
21
12
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 18 52
3
44
min
17 23
30
7
35
26 46
24
13
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 17 23 18 52
30
7
35
26 46
24
44
current
min
14
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 17 23 18 52
30
7
35
26 46
24
44
current
0 1 2 3
min
15
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 17 23 18 52
30
7
35
26 46
24
44
current
0 1 2 3
min
16
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 17 23 18 52
30
7
35
26 46
24
44
current
0 1 2 3
min
17
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 17 23 18 52
30
7
35
26 46
24
44
current
0 1 2 3
Merge 17 and 23 trees.
min
18
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 17
23
18 52
30
7
35
26 46
24
44
current
0 1 2 3
Merge 7 and 17 trees.
min
19
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 7
30
18 52
17
35
26 46
24
44
current
0 1 2 3
23
Merge 7 and 24 trees.
min
20
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 7
30
18 52
23
17
35
26 46
24 44
current
0 1 2 3
min
21
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 7
30
18 52
23
17
35
26 46
24 44
current
0 1 2 3
min
22
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 7
30
18 52
23
17
35
26 46
24 44
current
0 1 2 3
min
23
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39
41 7
30
18 52
23
17
35
26 46
24 44
current
0 1 2 3
Merge 41 and 18 trees.
min
24
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39 41
7
30
18 52
23
17
35
26 46
24
44
current
0 1 2 3
min
25
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39 41
7
30
18 52
23
17
35
26 46
24
44
current
0 1 2 3
min
26
Fibonacci Heaps: Delete Min
Delete min.
Delete min and concatenate its children into root list.
Consolidate trees so that no two roots have same degree.
39 41
7
30
18 52
23
17
35
26 46
24
44
min
Stop.
27
Fibonacci Heaps: Delete Min Analysis
Notation.
D(n) = max degree of any node in Fibonacci heap with n nodes.
t(H) = # trees in heap H.
u(H) = t(H) + 2m(H).
Actual cost. O(D(n) + t(H))
O(D(n)) work adding min's children into root list and updating min.
at most D(n) children of min node
O(D(n) + t(H)) work consolidating trees.
work is proportional to size of root list since number of roots
decreases by one after each merging
s D(n) + t(H) - 1 root nodes at beginning of consolidation
Amortized cost. O(D(n))
t(H') s D(n) + 1 since no two trees have same degree.
Au(H) s D(n) + 1 - t(H).
28
Fibonacci Heaps: Delete Min Analysis
Is amortized cost of O(D(n)) good?
Yes, if only Insert, Delete-min, and Union operations supported.
in this case, Fibonacci heap contains only binomial trees since
we only merge trees of equal root degree
this implies D(n) s log
2
N
Yes, if we support Decrease-key in clever way.
we'll show that D(n) s log
|
N, where | is golden ratio
|
2
= 1 + |
| = (1 + \5) / 2 = 1.618
limiting ratio between successive Fibonacci numbers!
29
Decrease key of element x to k.
Case 0: min-heap property not violated.
decrease key of x to k
change heap min pointer if necessary
24
46
17
30
23
7
88
26
21
52
39
18
41
38
Decrease 46 to 45.
72
Fibonacci Heaps: Decrease Key
45
35
min
30
Decrease key of element x to k.
Case 1: parent of x is unmarked.
decrease key of x to k
cut off link between x and its parent
mark parent
add tree rooted at x to root list, updating heap min pointer
24
45
17
30
23
7
88
26
21
52
39
18
41
38
Decrease 45 to 15.
72
Fibonacci Heaps: Decrease Key
15
35
min
31
Decrease key of element x to k.
Case 1: parent of x is unmarked.
decrease key of x to k
cut off link between x and its parent
mark parent
add tree rooted at x to root list, updating heap min pointer
24
15
17
30
23
7
88
26
21
52
39
18
41
38
Decrease 45 to 15.
72
24
Fibonacci Heaps: Decrease Key
35
min
32
Decrease key of element x to k.
Case 1: parent of x is unmarked.
decrease key of x to k
cut off link between x and its parent
mark parent
add tree rooted at x to root list, updating heap min pointer
24 17
30
23
7
88
26
21
52
39
18
41
38
Decrease 45 to 15.
24
Fibonacci Heaps: Decrease Key
35
min
15
72
33
35
Decrease key of element x to k.
Case 2: parent of x is marked.
decrease key of x to k
cut off link between x and its parent p[x], and add x to root list
cut off link between p[x] and p[p[x]], add p[x] to root list
If p[p[x]] unmarked, then mark it.
If p[p[x]] marked, cut off p[p[x]], unmark, and repeat.
24
15
17
30
23
7
88
26
21
52
39
18
41
38
Decrease 35 to 5.
72 24
Fibonacci Heaps: Decrease Key
5
min
34
Decrease key of element x to k.
Case 2: parent of x is marked.
decrease key of x to k
cut off link between x and its parent p[x], and add x to root list
cut off link between p[x] and p[p[x]], add p[x] to root list
If p[p[x]] unmarked, then mark it.
If p[p[x]] marked, cut off p[p[x]], unmark, and repeat.
24 17
30
23
7
26
21
52
39
18
41
38
Decrease 35 to 5.
24
5
Fibonacci Heaps: Decrease Key
88
parent marked
15
72
min
35
Decrease key of element x to k.
Case 2: parent of x is marked.
decrease key of x to k
cut off link between x and its parent p[x], and add x to root list
cut off link between p[x] and p[p[x]], add p[x] to root list
If p[p[x]] unmarked, then mark it.
If p[p[x]] marked, cut off p[p[x]], unmark, and repeat.
24
26
17
30
23
7
21
52
39
18
41
38
Decrease 35 to 5.
88 24
5
Fibonacci Heaps: Decrease Key
15
72
parent marked
min
36
Decrease key of element x to k.
Case 2: parent of x is marked.
decrease key of x to k
cut off link between x and its parent p[x], and add x to root list
cut off link between p[x] and p[p[x]], add p[x] to root list
If p[p[x]] unmarked, then mark it.
If p[p[x]] marked, cut off p[p[x]], unmark, and repeat.
26
17
30
23
7
21
52
39
18
41
38
Decrease 35 to 5.
88
5
Fibonacci Heaps: Decrease Key
15 24
72
min
37
Notation.
t(H) = # trees in heap H.
m(H) = # marked nodes in heap H.
u(H) = t(H) + 2m(H).
Actual cost. O(c)
O(1) time for decrease key.
O(1) time for each of c cascading cuts, plus reinserting in root list.
Amortized cost. O(1)
t(H') = t(H) + c
m(H') s m(H) - c + 2
each cascading cut unmarks a node
last cascading cut could potentially mark a node
Au s c + 2(-c + 2) = 4 - c.
Fibonacci Heaps: Decrease Key Analysis
38
Delete node x.
Decrease key of x to -.
Delete min element in heap.
Amortized cost. O(D(n))
O(1) for decrease-key.
O(D(n)) for delete-min.
D(n) = max degree of any node in Fibonacci heap.
Fibonacci Heaps: Delete
39
Fibonacci Heaps: Bounding Max Degree
Definition. D(N) = max degree in Fibonacci heap with N nodes.
Key lemma. D(N) s log
|
N, where | = (1 + \5) / 2.
Corollary. Delete and Delete-min take O(log N) amortized time.
Lemma. Let x be a node with degree k, and let y
1
, . . . , y
k
denote the
children of x in the order in which they were linked to x. Then:
Proof.
When y
i
is linked to x, y
1
, . . . , y
i-1
already linked to x,
degree(x) = i - 1
degree(y
i
) = i - 1 since we only link nodes of equal degree
Since then, y
i
has lost at most one child
otherwise it would have been cut from x
Thus, degree(y
i
) = i - 1 or i - 2
>
=
>
1 if 2
1 if 0
) ( degree
i i
i
y
i
40
Fibonacci Heaps: Bounding Max Degree
Key lemma. In a Fibonacci heap with N nodes, the maximum degree of
any node is at most log
|
N, where | = (1 + \5) / 2.
Proof of key lemma.
For any node x, we show that size(x) > |
degree(x)
.
size(x) = # node in subtree rooted at x
taking base | logs, degree(x) s log
|
(size(x)) s log
|
N.
Let s
k
be min size of tree rooted at any degree k node.
trivial to see that s
0
= 1, s
1
= 2
s
k
monotonically increases with k
Let x* be a degree k node of size s
k
,
and let y
1
, . . . , y
k
be children in order
that they were linked to x*.
Assume k > 2
+ =
+ >
+ >
+ =
=
=
=
=
=
2
0
2
2
2
] deg[
2
2
2
2
) ( 2
*) ( size
k
i
i
k
i
i
k
i
y
k
i
i
k
s
s
s
y size
x s
i
41
Fibonacci Facts
Definition. The Fibonacci sequence is:
1, 2, 3, 5, 8, 13, 21, . . .
Slightly nonstandard definition.
Fact F1. F
k
> |
k
, where | = (1 + \5) / 2 = 1.618
Fact F2.
Consequence. s
k
> F
k
> |
k
.
This implies that size(x) > |
degree(x)
for all nodes x.
> +
=
=
=
2 if F F
1 if 2
0 if 1
F
2 - k 1 - k
k
k
k
k
+ = >
=
2
0
2 , 2 For
k
i
i k
F F k
+ =
+ >
+ >
+ =
=
=
=
=
=
2
0
2
2
2
] deg[
2
2
2
2
) ( 2
*) ( size
k
i
i
k
i
i
k
i
y
k
i
i
k
s
s
s
y size
x s
i
42
Golden Ratio
Definition. The Fibonacci sequence is: 1, 2, 3, 5, 8, 13, 21, . . .
Definition. The golden ratio | = (1 + \5) / 2 = 1.618
Divide a rectangle into a square and smaller rectangle such that the
smaller rectangle has the same ratio as original one.
Parthenon, Athens Greece
43
Fibonacci Facts
44
Fibonacci Numbers and Nature
Pinecone
Cauliflower
45
Fibonacci Proofs
Fact F1. F
k
> |
k
.
Proof. (by induction on k)
Base cases:
F
0
= 1, F
1
= 2 > |.
Inductive hypotheses:
F
k
> |
k
and F
k+1
> |
k+1
Fact F2.
Proof. (by induction on k)
Base cases:
F
2
= 3, F
3
= 5
Inductive hypotheses:
+ = >
=
2
0
2 , 2 For
k
i
i k
F F k
2
2
1
1 2
) (
) 1 (
+
+
+ +
=
=
+ =
+ >
+ =
k
k
k
k k
k k k
F F F
|
2
= | + 1
+ =
=
2
0
2
k
i
i k
F F
+ =
+ + =
+ =
=
=
+
+ +
k
i
k
k
i
k i
k k k
F
F F
F F F
0
2
0
1
1 2
2
2
46
On Complicated Algorithms
"Once you succeed in writing the programs for [these] complicated
algorithms, they usually run extremely fast. The computer doesn't
need to understand the algorithm, its task is only to run the
programs."
R. E. Tarjan