Fibonacci Heaps
History. [Fredman and Tarjan, 1986]
Ingenious data structure and analysis.
Original motivation: improve Dijkstra's shortest path
algorithm
V insert, V delete-min, E decrease-key
from O(E log V ) to O(E + V log V ).
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
each parent larger than its children
Fibonacci heap.
Set of heap-ordered trees.
Maintain pointer to minimum element.
Set of marked nodes.
roots heap-ordered tree
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.
trees(H) = 5 marks(H) = 3 n = 14 rank = 3 min
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
trees(H) = 5 marks(H) = 3 (H) = 5 + 23 = 11 min
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
Actual cost. O(1)
(H) = trees(H) + 2
marks(H)potential of heap H
Change in potential. +1
Amortized cost. O(1)
min
17 24 23 7 21 3
30 26 46
18 52 41
Heap H 35
39 44
10
Delete Min
11
Linking Operation
Linking operation. Make larger root be a child of
smaller root.
larger root smaller root still heap-ordered
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
Actual cost. O(rank(H)) + O(trees(H))
O(rank(H)) to meld min's children into root list.
O(rank(H)) + O(trees(H)) to update min.
O(rank(H)) + O(trees(H)) to consolidate trees.
Change in potential. O(rank(H)) - trees(H)
trees(H' ) rank(H) + 1 since no two trees have
same rank.
(H) rank(H) + 1 - trees(H).
Amortized cost. O(rank(H))
29
Fibonacci Heaps: Delete Min Analysis
Q. Is amortized cost of O(rank(H)) good?
A. Yes, if only insert and delete-min operations.
In this case, all trees are binomial trees.
This implies rank(H) lg n. we only link trees of equal rank
B0 B1 B2 B3
A. Yes, we'll implement decrease-key so that rank(H) =
O(log n).
30
Fibonacci Heaps: Decrease Key
Intuition for deceasing the key of node x.
If heap-order is not violated, just decrease the key
of x.
Otherwise, cut tree rooted at x and meld into root
list.
To keep trees flat: as soon as a node has its second
child cut,
cut it off and meld into root list
min (and unmark it).
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
Case 1. [heap order not violated]
Decrease key of x.
Change heap min pointer (if necessary).
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
Case 1. [heap order not violated]
Decrease key of x.
Change heap min pointer (if necessary).
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
Case 2a. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and
unmark.
If parent p of x is unmarked (hasn't yet lost a
child), mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all min
ancestors that lose a
second child).
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
Case 2a. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and
unmark.
If parent p of x is unmarked (hasn't yet lost a
child), mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all min
ancestors that lose a
second child).
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
Case 2a. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and
unmark.
If parent p of x is unmarked (hasn't yet lost a
child), mark it;
Otherwise, cut p, meld into root list, and unmark
x(and do so recursively for all min
ancestors that lose a
second child).
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
Case 2a. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and
unmark.
If parent p of x is unmarked (hasn't yet lost a
child), mark it;
Otherwise, cut p, meld into root list, and unmark
x(and do so recursively for all min
ancestors that lose a
second child).
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
Case 2b. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and unmark.
If parent p of x is unmarked (hasn't yet lost a child),
mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all ancestors that lose a
second child). 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
Case 2b. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and unmark.
If parent p of x is unmarked (hasn't yet lost a child),
mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all ancestors that lose a
second child). 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
Case 2b. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and
unmark.
If parent p of x is unmarked (hasn't yet lost a
child), mark it;
Otherwise, cut p, meld into root list, and unmark
min
(and do
x
so recursively for all ancestors that lose a
second child).
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
Case 2b. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and unmark.
If parent p of x is unmarked (hasn't yet lost a child),
mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all ancestors that lose a
min
second x
child).
15 5 7 18 38
72 second child cut
24 17 23 21 39 41
p 26 30 52
decrease-key of x from 35 to 5
88
41
Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and unmark.
If parent p of x is unmarked (hasn't yet lost a child),
mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all ancestors that lose a
min
second x
child).
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
Case 2b. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and unmark.
If parent p of x is unmarked (hasn't yet lost a child),
mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all ancestors that lose a
min
second x
child).
p
15 5 26 7 18 38
72 88 p' 24 17 23 21 39 41
second child cut
30 52
decrease-key of x from 35 to 5
43
Fibonacci Heaps: Decrease Key
Case 2b. [heap order violated]
Decrease key of x.
Cut tree rooted at x, meld into root list, and unmark.
If parent p of x is unmarked (hasn't yet lost a child),
mark it;
Otherwise, cut p, meld into root list, and unmark
(and do so recursively for all ancestors that lose a
min
second x
child).
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: Decrease Key Analysis
Decrease-key.
(H) = trees(H) + 2
marks(H)potential function
Actual cost. O(c)
O(1) time for changing the key.
O(1) time for each of c cuts, plus melding into root
list.
Change in potential. O(1) - c
trees(H') = trees(H) + c.
marks(H') marks(H) - c + 2.
c + 2 (-c + 2) = 4 - c.
Amortized cost. O(1)
45