Documente Academic
Documente Profesional
Documente Cultură
Lecture X
Fibonacci Heaps
Fibonacci Heaps
• Binomial heaps support the mergeable heap
operations (INSERT, MINIMUM,
EXTRACT_MIN, UNION plus,
DECREASE_KEY and DELETE) in O(lgn)
worst-case time.
• Fibonacci heaps support the mergeable heap
operations that do not involve deleting an
element in O(1) amortized time.
CS XXX Lecture X 2
Fibonacci Heaps
CS XXX Lecture X 3
Fibonacci Heaps
CS XXX Lecture X 5
Structure of Fibonacci Heaps
• Each child y in a child list has pointers
left[y] & right[y] that point to y’s left &
right siblings respectively.
• If y is an only child, then
left[y] = right[y] = y.
CS XXX Lecture X 6
Structure of Fibonacci Heaps
The roots of all trees are also
linked together using their p
left & right pointers into a key
degree
circular, doubly-linked list mark
which is called the root list. left right
child
CS XXX Lecture X 7
Structure of Fibonacci Heaps
• Circular, doubly-linked lists have two
advantages for use in fib-heaps:
– we can remove a node in O(1) time
– given two such lists, we can concatenate them
in O(1) time.
CS XXX Lecture X 8
Structure of Fibonacci Heaps
• Two other fields in each node x
– degreee[x]: the number of children in the child
list of x
– mark[x]: a boolean-valued field
• indicates whether node x has lost a child since the
last time x was made the child of another one
• newly created nodes are unmarked
• A node x becomes unmarked whenever it is made
the child of another node
CS XXX Lecture X 9
Structure of Fibonacci Heaps
min[H]
23 7 3 17 24
18 52 38 30 26 46
marked Marked
nodes node
39 41 35
CS XXX Lecture X 10
Structure of Fibonacci Heaps
min[H]
23 7 3 17 24
18 52 38 26
39 41 35
CS XXX Lecture X 11
Concetenation of Two Circular,
Doubly – Linked Lists
min[H1]
b
a c d e
(x)
q
p r s
(y)
min[H2]
CS XXX Lecture X 12
Concetenation of Two Circular,
Doubly – Linked Lists
min[H2] min[H1]
a b r s p q c d d
CS XXX Lecture X 13
Concetenation of Two Circular,
Doubly – Linked Lists
CONCATENATE (H1, H2)
Running time
x ← left[min[H1]]
y ← left[min[H2]] is O(1)
right[x] ← min[H2]
left[min[H2]] ← x
right[y] ← min[H1]
left[min[H1]] ← y
end
CS XXX Lecture X 14
Potential Function
• A given fibonacci heap H
– t(H): the number of trees in root list of H
– m(H): the number of marked nodes in H
• The potential of fibonacci heap H is:
Φ(H) = t(H) + 2 m(H)
• A fibonacci heap application begins with an empty
heap:
the initial potential = 0
• The potential is non-negative at all subsequent
times.
CS XXX Lecture X 15
Maximum Degree
• We will assume that there is aknown upper
bound D(n) on the maximum degree of any
node in an n node heap
• If only mergeable-heap operations are
supported
D(n) lg n
• If decrease key & delete operations are supported
D(n) = O(lg n)
CS XXX Lecture X 16
Mergeable Heap Operations
MAKE-HEAP, INSERT, MINIMUM,
EXTRACT-MIN, UNION
If only these operations are to be supported,
each fibonacci-heap is a collection of
unordered binomial trees.
CS XXX Lecture X 17
Mergeable Heap Operations
• An unordered binomial tree Uk
– is like a binomial tree
– defined recursively:
• U0 consists of a single node
• Uk consists of two Uk-1’s for which the root of one is
made into any child of the root of the other
CS XXX Lecture X 18
Mergeable Heap Operations
• Lemma which gives properties of binomial trees
holds for unordered binomial trees as well but
with the following variation on property 4
• Property 4’: For the unordered binomial tree Uk:
– The root has degree k > the degree of any other node
– The children of the root are the roots of subtrees
U0, U1, ..........,Uk-1 in some order
CS XXX Lecture X 19
Mergeable Heap Operations
• The key idea in the mergeable heap operations on
fibonacci heaps is to delay work as long as
possible.
• Performance trade-off among implementations of
the various operations:
– If the number of trees is small we can quickly
determine the new min node during EXTRACT-MIN
– However we pay a price for ensuring that the number of
trees is small
CS XXX Lecture X 20
Mergeable Heap Operations
• However we pay a price for ensuring that the
number of trees is small
• However it can take up to Ω(lg n) time
– to insert a node into a binomial heap
– or to unite two binomial heaps
• We do not consolidate trees in a fibonacci heap
when we insert a new node or unite two heaps
• We delay the consolidation for the EXTRACT-
MIN operation when we really need to find the
new minimum node.
CS XXX Lecture X 21
Mergeable Heap Operations
Creating a new fibonacci heap:
MAKE-FIB-HEAP procedure
– allocates and returns the fibonacci heap object
H
– Where n[H] = 0 and min[H] = NIL
– There are no trees in the heap
because t(H) = 0 and m(H) = 0 => Φ(H) = 0
the amortized cost = O(1) = the actual cost
CS XXX Lecture X 22
Mergeable Heap Operations
Inserting a node
FIB-HEAP-INSERT(H, x)
degree[x] ← 0
p[x] ← NIL
child[x] ← NIL
left[x] ← x
right[x] ← x
mark[x] ← FALSE
concatenate the root list containing x with root list H
if key[x] < key[min[H]] then
min[H] ← x
endif
n[H] ← n[H] + 1
end
CS XXX Lecture X 23
Mergeable Heap Operations
min[H]
H
x 21
23 7 3 17 24
18 52 38 30 26 46
39 41 35
CS XXX Lecture X 24
Mergeable Heap Operations
min[H’]
H’
23 7 21 3 17 24
18 52 38 30 26 46
39 41 35
CS XXX Lecture X 25
Mergeable Heap Operations
t(H’) = t(H) + 1
• Increase in potential:
Φ(H’) - Φ(H) = [t(H) + 1 + 2m(H)] – [t(H)
+ 2m(H)]
=1
The actual cost = O(1)
The amortized cost = O(1) + 1 = O(1)
CS XXX Lecture X 26
Mergeable Heap Operations
Finding the minimum node:
Given by pointer min[H]
actual cost = O(1)
amortized cost = actual cost = O(1)
since the potential of H does not change
CS XXX Lecture X 27
Uniting Two Fibonacci Heaps
FIB-HEAP-UNION(H1, H2)
H = MAKE-FIB-HEAP()
if key[min[H1]] ≤ key[min[H2]] then
min[H] ← min[H1]
else
min[H] ← min[H2]
endif
concatenate the root lists of H1 and H2
n[H] ← n[H1] + n[H2]
Free the objects H1 and H2
return H
end
CS XXX Lecture X 28
Uniting Two Fibonacci Heaps
• No consolidation of trees
• Actual cost = O(1)
• Change in potential
Φ(H) – (Φ(H1) + Φ(H2)) =
= (t(H) + 2m(H)) – ((t(H1) + 2m(H1)) +
(t(H2) + 2m(H2)))
= 0 since t(H) = t(H1) + t(H2)
m(H) = m(H1) + m(H2)
Therefore amortized cost = actual cost = O(1)
CS XXX Lecture X 29
Extracting the Minimum Node
The most complicated operation the delayed work of consolidating the
trees in the root list occurs
FIB-HEAP-EXTRACT-MIN(H)
z = min[H]
for each child x of z
add x to the root list of H
p[x] ← NIL
endfor
remove z from the root list of H
min[H] ← right[z]
CONSOLIDATE(H)
end
CS XXX Lecture X 30
Extracting the Minimum Node
• Repeatedly execute the following steps until every root in
the root list has a distinct degree value
(1) Find two roots x and y in the root list with the same
degree
where key[x] ≤ key[y]
(2) Link y to x : Remove y from the root list and make y a
child of x
This operation is performed by procedure FIB-HEAP-
LINK
Procedure CONSOLIDATE uses an auxiliary pointer array
A[0......D(n)]
A[i] = y : y is currently a root with degree[y] = i
CS XXX Lecture X 31
Extracting the Minimum Node
CONSOLIDATE(H)
for i← 0 to D(n) do
A[i] ← N IL min[H] ← +∞
endfor
for each node w in the root list of H do for i ← 0 to D(n[H]) do
x←w if A[i] ≠ NIL then
d ← degree[x]
while A[d] ≠ NIL do add A[i] to the root list of H
y ← A[d] if key[A[i]] < key[min[H]] then
if key[x] > key[y] then
exchange x ↔ y min[H] ← A[i]
endif endif
FIB-HEAP-LINK(H,y,x)
A[d] ← NIL endif
d←d+1 endfor
endwhile
A[d] ← x end
endfor
CS XXX Lecture X 32
Extracting the Minimum Node
FIB-HEAP-LINK(H,y,x)
remove y from the root list of H
make y a child of x, incrementing degree[x]
mark[y] ← FALSE
end
CS XXX Lecture X 33
Extracting the Minimum Node
min[H]
23 7 21 3 17 24
18 52 38 30 26 46
39 41 35
CS XXX Lecture X 34
Extracting the Minimum Node
min[H]
23 7 21 18 52 38 17 24
39 41 30 26 46
35
CS XXX Lecture X 35
Extracting the Minimum Node
0 1 2 3 4
A
w, x
23 7 21 18 52 38 17 24
39 41 30 26 46
35
CS XXX Lecture X 36
Extracting the Minimum Node
0 1 2 3 4
A
w, x
23 7 21 18 52 38 17 24
39 41 30 26 46
35
CS XXX Lecture X 37
Extracting the Minimum Node
0 1 2 3 4
A
w, x
23 7 21 18 52 38 17 24
39 41 30 26 46
35
CS XXX Lecture X 38
Extracting the Minimum Node
0 1 2 3 4
A
w 7 21 18 52 38 17 24
x 23 39 41 30 26 46
35
CS XXX Lecture X 39
Extracting the Minimum Node
0 1 2 3 4
A
x
7 21 18 52 38 24
17 23 w 39 41 26 46
35
30
CS XXX Lecture X 40
Extracting the Minimum Node
0 1 2 3 4
A
x
7 21 18 52 38
24 17 23 w 39 41
26 46 30
35
CS XXX Lecture X 41
Extracting the Minimum Node
A
w, x
7 21 18 52 38
24 17 23 39 41
26 46 30
35
CS XXX Lecture X 42
Extracting the Minimum Node
0 1 2 3 4
A
w, x
7 21 18 38
24 17 23 52 39 41
26 46 30
35
CS XXX Lecture X 43
Extracting the Minimum Node
0 1 2 3 4
A
7 18 w, x 38
24 17 23 21 39 41
26 46 30 52
35
CS XXX Lecture X 44
Extracting the Minimum Node
0 1 2 3 4
A
w, x
7 18 38
24 17 23 21 39 41
26 46 30 52
35
CS XXX Lecture X 45
Extracting the Minimum Node
min[H]
7 18 38
24 17 23 21 39 41
26 46 30 52
35
CS XXX Lecture X 46
Analysis of the
FIB-HEAP-EXTRACT-MIN Procedure
• If all trees in the fib-heap are unordered binomial trees
before the execution of the EXTRACT-MIN operation
then they are all unordered binomial trees afterward.
• There are two ways in which trees are changed:
(1) each child of the extracted root node becomes
a child, each new tree is itself an unordered binomial
tree.
(2) trees are linked by FIB-HEAP-LINK procedure
only if they have the same degree hence Uk is linked to Uk
to form a Uk+1
CS XXX Lecture X 47
Complexity Analysis of the
FIB-HEAP-EXTRACT-MIN Procedure
Actual Cost
1-st for loop: Contributes O(D(n))
3-rd for loop: Contributes O(D(n))
2-nd for loop:
Size of the root-list upon calling CONSOLIDATE is at most:
D(n) + t(H) - 1
D(n): upper bound on the number of children of the extracted
node
t(H) – 1: original t(H) root list nodes – the extracted node
CS XXX Lecture X 48
Complexity Analysis of the
FIB-HEAP-EXTRACT-MIN Procedure
Each iteration of the inner while-loop links
one root to another thus reducing the size of
the root list by 1
Therefore the total amount work performed in
the 2-nd for loop is at most proportional to
D(n) + t(H)
Thus, the total actual cost is O(D(n) + t(H))
CS XXX Lecture X 49
Complexity Analysis of the
FIB-HEAP-EXTRACT-MIN Procedure
Amortized Cost
Potential before: t(H) + 2m(H)
Potential after: at most (D(n) + 1)+2m(H) since at
most D(n)+1 roots remain & no nodes marked
Amortized cost = O(D(n) + t(H)) +
[(D(n) + 1) + 2m(H)] –
[t(H) + 2m(H)]
= O(D(n)) + O(t(H)) – D(n) – t(H)
= O(D(n))
CS XXX Lecture X 50
Complexity Analysis of the
FIB-HEAP-EXTRACT-MIN Procedure
CS XXX Lecture X 51
EXTRACT-MIN Procedure for
Fibonacci Heaps
FIB-HEAP-EXTRACT-MIN (H)
z min[ H ]
if z ≠ NIL then
for each child x of z do
add x to the root list of H
p [ x ] NIL
endfor
remove z from the root list of H
if right [ z ] = z then
min [ H ] NIL
else
min [ H ] right [ z ]
CONSOLIDATE (H)
endif
n[H]n[H]–1
endif
return z
end
CS XXX Lecture X 52
EXTRACT-MIN Procedure for
Fibonacci Heaps
FIB-HEAP-LINK ( H, y, x )
remove y from the root list of H
make y a child of x, incrementing degree [x]
mark [ y ] FALSE
end
CS XXX Lecture X 53
EXTRACT-MIN Procedure for
Fibonacci Heaps
CONSOLIDATE ( H )
for i 0 to D ( n ( H ) )
A[ i ] NIL
endfor min [ H ] NIL
for each node w in the root list of H do for i 0 to D ( n [ H ] ) do
xw if A [ i ] ≠ NIL then
d degree [ x ] Add A [ i ] to the root list of H
while A [ d ] ≠ NIL do if min [ H ] = NIL or key [ A [ i ] ] <
yA[d] key [ min [ H ] ] then
if key [ x ] > key [ y ] then min [ H ] A [ i ]
exchange x ↔ y endif
endif endif
FIB-HEAP-LINK ( H , y, x ) endfor
A [ d ] NIL end
dd+1
endwhile
A[d]x
endfor
CS XXX Lecture X 54
Bounding the Maximum Degree
For each node x within a fibonacci heap,
define
size(x): the number of nodes, including
itself, in the subtree rooted at x
NOTE: x need not to be in the root list, it can
be any node at all.
We shall show that size(x) is exponential in
degree[x]
CS XXX Lecture X 55
Bounding the Maximum Degree
Lemma 1: Let x be a node with degree[x]=k
Let y1,y2,....,yk denote the children of x in
the order in which they are linked to x, from
earliest to the latest, then
degree[y1] ≥ 0 and degree[yi] ≥ i-2
for i = 2,3,...,k
CS XXX Lecture X 56
Bounding the Maximum Degree
Proof: degree[y1] ≥ 0 =>
obvious
For i ≥ 2:
LIN
K
y1 y2 z1 y3 z2 yi-1 yi
CS XXX Lecture X 57
Bounding the Maximum Degree
• When yi is linked to x: at least y1,y2,....,yi-1 were
all children of x so we must have had degree[x] ≥ i
–1
• NOTE: z node(s) denotes the node(s)
that were children of x just before the link of
yi that are lost after the link of yi
• When yi is linked to x:
degree[yi] = degree[x] ≥ i – 1
since then, node yi has lost at most one child, we
conclude that degree[yi] ≥ i-2
CS XXX Lecture X 58
Bounding the Maximum Degree
Fibonacci Numbers
0 if k 0
Fk 1 if k 1
F
k 1 Fk 2 if k 2
CS XXX Lecture X 59
Bounding the Maximum Degree
Lemma 2: For all
integers k ≥ 0
k
Fk 2 1
i 0
Fi
Proof: By induction on k
o
When k = 0: 1 Fi 1 F0 1 0 1 F2
i 0
CS XXX Lecture X 60
Bounding the Maximum Degree
k 1
Inductive Hypothesis: Fk 1 1 F i
i 0
Fk 2 Fk Fk 1
k 1
Fk (1 Fi ) Recall that Fk 2 k
i 0
k
where
1 Fi
i 0
1 5
1.61803 is the golden ratio
2
CS XXX Lecture X 61
Bounding the Maximum Degree
Lemma 3: Let x be any node in a fibonacci heap with
degree[x] = k then
size(x) ≥ Fk+2 ≥ Φk, where Φ = (1+√5)/2
Proof: Let Sk denote the lower bound on size(z) over
all nodes z such that
degree[z] = k
Trivially, S0 = 1, S1 = 2, S2 = 3
Note that,Sk ≤ size(z) for any node z with degree[z]
=k
CS XXX Lecture X 62
Bounding the Maximum Degree
As in Lemma-1, let y1,y2,....,yk denote the children of
node x in the order in which they were linked to x
k k
size ( x) S k 1 1 Si 2 2 Si 2
i 2 i 2
CS XXX Lecture X 63
Bounding the Maximum Degree
Inductive Hypothesis:
Si ≥ Fi+2
for i=0,1,...,k-1
k k k
S k 2 S i 2 2 Fi 1 Fi Fi 2
i 2 i 2 i 0
CS XXX Lecture X 64
Bounding the Maximum Degree
Corollary: Max. degree D(n) in an n node fib-
heap is O(lg n)
Proof: Let x be any node with degree[x] = k in
an n-node fib-heap by Lemma-3 we have
n ≥ size(x) ≥ Φk
taking base-Φ log => k ≤ logΦn
therefore D(n) = O(lg n)
CS XXX Lecture X 65
Decreasing a Key
FIB-HEAP-DECREASE-KEY(H, x, k)
key[x] ← k
y ← p[x]
if y ≠ NIL and key[x] < key[y] then
CUT(H, x, y)
CASCADING-CUT(H,y)
endif /* else no structural change */
if key[x] < key[min[H]] then
min[H] ← x
endif
end
CS XXX Lecture X 66
Decreasing a Key
CUT(H, x, y)
remove x from the child list of y,
decrementing degree y
add x to the root list of H
p[x] ← NIL
mark[x] ← FALSE
end
CS XXX Lecture X 67
Decreasing a Key
CASCADING-CUT(H, y)
z ← p[y]
if z ≠ NIL then
if mark[y] = FALSE then
mark[y] = TRUE
else
CUT(H, y, z)
CASCADING-CUT(H, z)
endif
endif
end
CS XXX Lecture X 68
Decreasing a Key
min[H]
z T
7 18 38
15
CUT(H, 46, 24)
y
24 17 23 21 39 41
T
26 46 30 52
x
key[x] is decreased to 15 (no cascading cuts)
35
CS XXX Lecture X 69
Decreasing a Key
min[H]
15 7 18 38
5
CUT(H, 35, 26*)
T
z 23 21 39 41
24 17
y
T
26 30 52
x
35 key[x] => 5 will invoke 2 cascading cuts
CS XXX Lecture X 70
Decreasing a Key
15 5 7 18 38
CASCADING-CUT
T z 23 21 39 41
24 17
y
T
26 30 52
CS XXX Lecture X 71
Decreasing a Key
z
15 5 26 7 18 38
CASCADING-CUT
y
24 17 23 21 39 41
30 52
CS XXX Lecture X 72
Decreasing a Key
min[H]
15 5 26 24 7 18 38
17 23 21 39 41
30 52
CS XXX Lecture X 73
Decreasing a Key
F
2
F 5
60
T
6
20 7
T
8
T
10
30 11
T
12
18
*
14
CUT
decrease to 10
15 16
CS XXX Lecture X 74
Decreasing a Key
CASCADING-CUTS
F F F F F F
*
10 12 10 8 6 2
16 15 18 30 11 20 7 4 5
CS XXX Lecture X 75
Amortized Cost of
FIB-HEAP-DECREASE-KEY
Procedure
Actual Cost
O(1) time + the time required to perform the
cascading cuts, suppose that CASCADING-
CUT is recursively called c times each call
takes O(1) time exclusive of recursive calls
therefore,
the actual cost = O(1) + O(c) = O(c)
CS XXX Lecture X 76
Amortized Cost of
FIB-HEAP-DECREASE-KEY
Procedure
Amortized Cost
Let H denote the fib-heap prior to the
DECREASE-KEY operation.
Each recursive call of CASCADING-CUT,
except for the last one, cuts a marked node
and last call of cascading cut may mark a
node.
CS XXX Lecture X 77
Amortized Cost of
FIB-HEAP-DECREASE-KEY
Procedure
Hence, after the DECREASE-KEY operation
numberof trees t ( H ) 1 (c 1) t ( H ) C
CS XXX Lecture X 78
Amortized Cost of
FIB-HEAP-DECREASE-KEY
Procedure
Potential Difference
= [(t(H) + c) + 2(m(H)-c+2)]-[t(H)+2m(H)]
=4–c
CS XXX Lecture X 79
Deleting a Node
FIB-HEAP-DELETE(H, x)
FIB-HEAP-DECREASE-KEY(H, x, -∞) => O(1)
FIB-HEAP-EXTRACT-MIN(H) => O(D(n))
end
CS XXX Lecture X 80
Analysis of the Potential Function
CS XXX Lecture X 81
Analysis of the Potential Function
• Consider an EXTRACT-MIN operation:
Let T(H) denote the trees just priori to the execution
of EXTRACT-MIN the root-list, just before the
CONSOLIDATE operation,
T(H) – {x} U {children of x}
where x is the extracted node with the minimum key
• The root node of each tree in T(H) – {x} carries a
unit potential to pay for the link operation during
the CONSOLIDATE
CS XXX Lecture X 82
Analysis of the Potential Function
• Let T1&T2 Є T(H) - {x}
of the same degree = k
$1
$1 $1
LINK
T1 T2
T2
T1
•The root node with smaller key pays for the potential
•The root node of the resulting tree still carries a unit potential to
pay for a further link during the consolidate operation.
CS XXX Lecture X 83
Analysis of the Potential Function
• Why the potential function includes the
term 2m(H)?:
– When a marked node y is cut by a cascading cut
its mark bit is cleared so the potential is
reduced by 2
– One unit pays for the cut and clearing the mark
field
– The other unit compensates for the unit increase
in potential due to node y becoming a root
CS XXX Lecture X 84
Analysis of the Potential Function
• That is, when a marked node is cleared by a
CASCADING-CUT
t t 1
(t 1 2(m 1)) (t 2m) 1
m m 1
CS XXX Lecture X 86
Bounding the Maximum Degree
x
size[x] = 7 = degree[x] + 1
CS XXX Lecture X 87
Bounding the Maximum Degree
x
size[x] = 24 = 16
10 8 14 29
28 13 17
CS XXX Lecture X 88
Bounding the Maximum Degree
10 8 14 29 size(x) = 8 ≥ Φ4 ≈ 6.5
28 13 17
CS XXX Lecture X 89