Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

COS 423 Theory of Algorithms Kevin Wayne Spring 2007

Fibonacci Heaps
Lecture slides adapted from:
Chapter 20 of Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein.
Chapter 9 of The Design and Analysis of Algorithms by Dexter Kozen.
2
Theorem. Starting from empty Fibonacci heap, any sequence of
a
1
insert, a
2
delete-min, and a
3
decrease-key operations takes
O(a
1
+ a
2
log n + a
3
) time.
make-heap
Operation
insert
find-min
delete-min
union
decrease-key
delete
1
Binary
Heap
log n
1
log n
n
log n
log n
1
Binomial
Heap
log n
log n
log n
log n
log n
log n
1
Fibonacci
Heap

1
1
log n
1
1
log n
1
Relaxed
Heap
1
1
log n
1
1
log n
1
Linked
List
1
n
n
1
n
n
is-empty 1 1 1 1 1
Priority Queues Performance Cost Summary
amortized n = number of elements in priority queue
3
Hopeless challenge. O(1) insert, delete-min and decrease-key. Why?
Priority Queues Performance Cost Summary
make-heap
Operation
insert
find-min
delete-min
union
decrease-key
delete
1
Binary
Heap
log n
1
log n
n
log n
log n
1
Binomial
Heap
log n
log n
log n
log n
log n
log n
1
Fibonacci
Heap

1
1
log n
1
1
log n
1
Relaxed
Heap
1
1
log n
1
1
log n
1
Linked
List
1
n
n
1
n
n
is-empty 1 1 1 1 1
amortized n = number of elements in priority queue
4
Fibonacci Heaps
History. [Fredman and Tarjan, 1986]
! Ingenious data structure and analysis.
! Original motivation: improve Dijkstra's shortest path algorithm
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.
V insert, V delete-min, E decrease-key
5
7 23
30
17
35
26 46
24
Heap H
39
41 18 52
3
44
Fibonacci Heaps: Structure
Fibonacci heap.
! Set of heap-ordered trees.
! Maintain pointer to minimum element.
! Set of marked nodes.
roots
heap-ordered tree
each parent larger than its children
6
7 23
30
17
35
26 46
24
Heap H
39
41 18 52
3
44
Fibonacci Heaps: Structure
Fibonacci heap.
! Set of heap-ordered trees.
! Maintain pointer to minimum element.
! Set of marked nodes.
min
find-min takes O(1) time
7
7 23
30
17
35
26 46
24
Heap H
39
41 18 52
3
44
Fibonacci Heaps: Structure
Fibonacci heap.
! Set of heap-ordered trees.
! Maintain pointer to minimum element.
! Set of marked nodes.
min
use to keep heaps flat (stay tuned)
marked
8
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.
7 23
30
17
35
26 46
24
39
41 18 52
3
44
rank = 3
min
Heap H
trees(H) = 5 marks(H) = 3
marked
n = 14
9
Fibonacci Heaps: Potential Function
7 23
30
17
35
26 46
24
!(H) = 5 + 2"3 = 11
39
41 18 52
3
44
min
Heap H
!(H) = trees(H) + 2

"

marks(H)
potential of heap H
trees(H) = 5 marks(H) = 3
marked
10
Insert
11
Fibonacci Heaps: Insert
Insert.
! Create a new singleton tree.
! Add to root list; update min pointer (if necessary).
7 23
30
17
35
26 46
24
39
41 18 52
3
44
21
insert 21
min
Heap H
12
Fibonacci Heaps: Insert
Insert.
! Create a new singleton tree.
! Add to root list; update min pointer (if necessary).
39
41
7 23
18 52
3
30
17
35
26 46
24
44
21
min
Heap H
insert 21
13
Fibonacci Heaps: Insert Analysis
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
21 23
min
Heap H
!(H) = trees(H) + 2

"

marks(H)
potential of heap H
14
Delete Min
15
Linking Operation
Linking operation. Make larger root be a child of smaller root.
39
41 18 52
3
44 77
56 24
15
tree T
1
tree T
2
39
41 18 52
3
44
77
56 24
15
tree T'
smaller root larger root still heap-ordered
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.
39
41 18 52
3
44
17 23
30
7
35
26 46
24
min
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.
39
41 17 23 18 52
30
7
35
26 46
24
44
min
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.
39
41 17 23 18 52
30
7
35
26 46
24
44
min
current
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.
39
41 17 23 18 52
30
7
35
26 46
24
44
0 1 2 3
current
min
rank
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.
39
41 17 23 18 52
30
7
35
26 46
24
44
0 1 2 3
min
current
rank
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.
39
41 17 23 18 52
30
7
35
26 46
24
44
0 1 2 3
min
current
rank
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.
39
41 17 23 18 52
30
7
35
26 46
24
44
0 1 2 3
min
current
rank
link 23 into 17
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.
39
41 17
23
18 52
30
7
35
26 46
24
44
0 1 2 3
min
current
rank
link 17 into 7
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.
39
41 7
30
18 52
17
35
26 46
24
44
0 1 2 3
23
current
min
rank
link 24 into 7
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.
39
41 7
30
18 52
23
17
35
26 46
24 44
0 1 2 3
min
current
rank
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.
39
41 7
30
18 52
23
17
35
26 46
24 44
0 1 2 3
min
current
rank
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.
39
41 7
30
18 52
23
17
35
26 46
24 44
0 1 2 3
min
current
rank
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.
39
41 7
30
18 52
23
17
35
26 46
24 44
0 1 2 3
min
current
rank
link 41 into 18
29
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.
39 41
7
30
18 52
23
17
35
26 46
24
44
0 1 2 3
min
current
rank
30
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.
7
30
52
23
17
35
26 46
24
0 1 2 3
min
rank
39 41
18
44
current
31
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.
7
30
52
23
17
35
26 46
24
min
39 41
18
44
stop
32
Fibonacci Heaps: Delete Min Analysis
Delete min.
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))
!(H) = trees(H) + 2

"

marks(H)
potential function
33
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.
A. Yes, we'll implement decrease-key so that rank(H) = O(log n).
Fibonacci Heaps: Delete Min Analysis
B
0
B
1
B
2
B
3
we only link trees of equal rank
34
Decrease Key
35
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).
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
Fibonacci Heaps: Decrease Key
35
min
marked node:
one child already cut
36
Case 1. [heap order not violated]
! Decrease key of x.
! Change heap min pointer (if necessary).
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
Fibonacci Heaps: Decrease Key
29
35
min
x
decrease-key of x from 46 to 29
37
Case 1. [heap order not violated]
! Decrease key of x.
! Change heap min pointer (if necessary).
24
29
17
30
23
7
88
26
21
52
39
18
41
38
72
Fibonacci Heaps: Decrease Key
35
min
x
decrease-key of x from 46 to 29
38
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).
24
29
17
30
23
7
88
26
21
52
39
18
41
38
72
Fibonacci Heaps: Decrease Key
15
35
min
decrease-key of x from 29 to 15
p
x
39
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).
24
15
17
30
23
7
88
26
21
52
39
18
41
38
72
Fibonacci Heaps: Decrease Key
35
min
decrease-key of x from 29 to 15
p
x
40
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).
24 17
30
23
7
88
26
21
52
39
18
41
38
Fibonacci Heaps: Decrease Key
35
min
decrease-key of x from 29 to 15
p
15
72
x
41
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).
24 17
30
23
7
88
26
21
52
39
18
41
38
Fibonacci Heaps: Decrease Key
35
min
decrease-key of x from 29 to 15
p
15
72
x
mark parent
24
42
35
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).
24
15
17
30
23
7
88
26
21
52
39
18
41
38
72 24
Fibonacci Heaps: Decrease Key
5
min
x
p
decrease-key of x from 35 to 5
43
5
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).
24
15
17
30
23
7
88
26
21
52
39
18
41
38
72 24
Fibonacci Heaps: Decrease Key
min
x
p
decrease-key of x from 35 to 5
44
Fibonacci Heaps: Decrease Key
24 17
30
23
7
26
21
52
39
18
41
38
24
5
88
15
72
decrease-key of x from 35 to 5
x
p
min
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).
45
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).
24 17
30
23
7
26
21
52
39
18
41
38
24
5
Fibonacci Heaps: Decrease Key
88
15
72
decrease-key of x from 35 to 5
x
p
second child cut
min
46
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).
24
26
17
30
23
7
21
52
39
18
41
38
88 24
5
Fibonacci Heaps: Decrease Key
15
72
decrease-key of x from 35 to 5
x p
min
47
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).
24
26
17
30
23
7
21
52
39
18
41
38
88 24
5
Fibonacci Heaps: Decrease Key
15
72
decrease-key of x from 35 to 5
x p
p'
second child cut
min
48
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).
26
17
30
23
7
21
52
39
18
41
38
88
5
Fibonacci Heaps: Decrease Key
15 24
72
decrease-key of x from 35 to 5
x p p'
min
don't mark
parent if
it's a root
p''
49
Decrease-key.
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)
Fibonacci Heaps: Decrease Key Analysis
!(H) = trees(H) + 2

"

marks(H)
potential function
50
Analysis
51
Analysis Summary
Insert. O(1)
Delete-min. O(rank(H))

Decrease-key. O(1)

Key lemma. rank(H) = O(log



n).
amortized
number of nodes is exponential in rank
52
Fibonacci Heaps: Bounding the Rank
Lemma. Fix a point in time. Let x be a node, and let y
1
, , y
k
denote
its children in the order in which they were linked to x. Then:
Pf.
! When y
i
was linked into x, x had at least i

-1 children y
1
, , y
i-1
.
! Since only trees of equal rank are linked, at that time
rank(y
i
) = rank(x
i
) % i - 1.
! Since then, y
i
has lost at most one child.
! Thus, right now rank(y
i
) % i - 2.
!
rank (y
i
) "
0 if i =1
i #2 if i "1
$
%
&
or y
i
would have been cut
x
y
1
y
2
y
k

53
Fibonacci Heaps: Bounding the Rank
Lemma. Fix a point in time. Let x be a node, and let y
1
, , y
k
denote
its children in the order in which they were linked to x. Then:
Def. Let F
k
be smallest possible tree of rank k satisfying property.
F
0
F
1
F
2
F
3
F
4
F
5
1 2 3 5 8 13
!
rank (y
i
) "
0 if i =1
i #2 if i "1
$
%
&
x
y
1
y
2
y
k

54
Fibonacci Heaps: Bounding the Rank
Lemma. Fix a point in time. Let x be a node, and let y
1
, , y
k
denote
its children in the order in which they were linked to x. Then:
Def. Let F
k
be smallest possible tree of rank k satisfying property.
F
4
F
5
8 13
F
6
8 + 13 = 21
!
rank (y
i
) "
0 if i =1
i #2 if i "1
$
%
&
x
y
1
y
2
y
k

55
Fibonacci Heaps: Bounding the Rank
Lemma. Fix a point in time. Let x be a node, and let y
1
, , y
k
denote
its children in the order in which they were linked to x. Then:
Def. Let F
k
be smallest possible tree of rank k satisfying property.
Fibonacci fact. F
k


% &
k
, where & = (1 + '5) / 2 ( 1.618.
Corollary. rank(H) # log
&
n . golden ratio
x
y
1
y
2
y
k

!
rank (y
i
) "
0 if i =1
i #2 if i "1
$
%
&
56
Fibonacci Numbers
57
Fibonacci Numbers: Exponential Growth
Def. The Fibonacci sequence is: 1, 2, 3, 5, 8, 13, 21,
Lemma. F
k
% &
k
, where & = (1 + '5) / 2 ( 1.618.
Pf. [by induction on k]
! Base cases: F
0
= 1 % 1, F
1
= 2 % &.
! Inductive hypotheses: F
k
% &
k
and F
k+1
% &
k + 1
!
F
k
=
1 if k = 0
2 if k =1
F
k-1
+ F
k-2
if k " 2
#
$
%
&
%
slightly non-standard definition
!
F
k+2
= F
k
+ F
k+1
" #
k
+ #
k+1
= #
k
(1 + #)
= #
k
(#
2
)
= #
k+2
(&
2
= & + 1)
(inductive hypothesis)
(definition)
(algebra)
(algebra)
58
Fibonacci Numbers and Nature
pinecone
cauliflower
59
Union
60
Fibonacci Heaps: Union
Union. Combine two Fibonacci heaps.
Representation. Root lists are circular, doubly linked lists.
39
41
7 17
18 52
3
30
23
35
26 46
24
44
21
min min
Heap H' Heap H''
61
Fibonacci Heaps: Union
Union. Combine two Fibonacci heaps.
Representation. Root lists are circular, doubly linked lists.
39
41
7 17
18 52
3
30
23
35
26 46
24
44
21
min
Heap H
62
Fibonacci Heaps: Union
Actual cost. O(1)
Change in potential. 0
Amortized cost. O(1)
!(H) = trees(H) + 2

"

marks(H)
potential function
39
41
7 17
18 52
3
30
23
35
26 46
24
44
21
min
Heap H
63
Delete
64
Delete node x.
! decrease-key of x to -).
! delete-min element in heap.
Amortized cost. O(rank(H))
! O(1) amortized for decrease-key.
! O(rank(H)) amortized for delete-min.
Fibonacci Heaps: Delete
!(H) = trees(H) + 2

"

marks(H)
potential function

You might also like