Fibonacci Heaps
Sachin Tripathi
IIT(ISM) Dhanbad
COS 423 Theory of Algorithms • Kevin Wayne • Spring 2007
Fibonacci Heaps
History. [Fredman and Tarjan, 1986]
Original motivation: improve Dijkstra's shortest path algorithm
from O(E log V ) to O(E + V log V ).
V insert, V delete-min, E decrease-key
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.
2
Fibonacci Heaps: Structure
each parent smaller 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
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.
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
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.
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
6
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
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
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
11
Delete Min
12
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'
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
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 (and unmark it).
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
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 ancestors that lose a second child).
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
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 ancestors that lose a second child).
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
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 ancestors that lose a second child).
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
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 ancestors that lose a second child).
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
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
(and do so recursively for all ancestors that lose a second child).
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
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
x
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 second child).
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
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
x 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 second child).
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