Fibonacci Heaps CS 583 Analysis of Algorithms 7/1/2016

advertisement
Fibonacci Heaps
CS 583
Analysis of Algorithms
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
1
Outline
• Operations on Binomial Heaps
–
–
–
–
Inserting a node
Extracting the node with minimum key
Decreasing a key
Deleting a key
• Fibonacci Heaps
–
–
–
–
Definitions
Amortized analysis
Inserting a node
Union
• Self-test
– 20.2-2
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
2
Binomial Heaps: Inserting a Node
This procedure inserts node x into binomial heap H, assuming that x is already
allocated with key[x].
Binomial-Heap-Insert(H, x)
1 H2 = Make-Binomial-Heap() // create empty heap
2 p[x] = NIL
3 child[x] = NIL
4 sibling[x] = NIL
5 degree[x] = 0
6 head[H2] = x
7 H = Binomial-Heap-Union(H, H2)
The procedure makes a one node heap H2 in (1) time and unites it with the
n-node binomial heap H in O(lg n) time.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
3
Extracting Minimum Node
This procedure extracts the node with the minimum key from heap H and
returns a pointer to the extracted node.
Binomial-Heap-Extract-Min(H)
1 x = <Find the root with the minimum key
in the root list of H and remove it from H>
2 H2 = Make-Binomial-Heap()
// Remove x (root) from the tree, and
// prepare the linked list as B0, B1, ... , Bk-1
3 <reverse the order of x’s children>
4 head[H2] = <head of x’s children>
5 H = Binomial-Heap-Union(H,H2)
6 return x
Each of lines 1,3,4,5 takes O(lg n) time if H has n nodes. Hence the above
procedure runs in O(lg n) time.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
4
Decreasing a Key
This procedure decreases the key of a node x in a heap H to a new value k.
Binomial-Heap-Decrease(H, x, k)
1 if k > key[x]
2
throw “new key is greater than the current key”
3 key[x] = k
4 y = x
5 z = p(y)
// Bubble up the key in the heap
6 while z <> NIL and key[y] < key[z]
7
<exchange key[y] with key[z]>
8
<exchange satellite info y with z>
9
y = z
10
z = p[y]
The maximum depth of x is lg n, hence the while loop 6 iterates at most lg n
times. Each iteration takes (1) time, hence the running time of the
algorithm is O(lg n).
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
5
Deleting a Key
Deleting a key is a straightforward combination of existing procedures. The
procedure takes a heap H, and the node x.
Binomial-Heap-Delete(H, x)
// Make x’s key the smallest
1 Binomial-Heap-Decrease-Key(H, x, -)
// Remove x from H
2 Binomial-Heap-Extract-Min(H)
Both subroutines take O(lg n), hence the running time of the above procedure
is O(lg n).
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
6
Fibonacci Heaps
• Fibonacci heaps support meargeable-heap
operations:
– Insert, Minimum, Extract-Min, Union, Decrease-Key,
Delete.
• They have the advantage over other heap types in
that operations that do not involve deleting an
element run in (1) time.
– They are theoretically desirable in applications that
involve small number of Extract-Min and Delete
operations relative to the total number of operations.
– Practically, their complexity and constant factors make
them less desirable than binary heaps for most
applications.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
7
Fibonacci Heaps: Definition
• A Fibonacci heap is a collection of min-heap trees.
– The trees are not constrained to be binomial trees.
– The trees are unordered, i.e. children nodes order does not
matter.
– Each node x contains the following fields:
• p[x] pointer to its parent.
• child[x] pointer to any of its children.
– all children nodes are linked in a circular doubly linked list using left[.] and
right[.] pointers.
• degree[x] – the number of x’s children.
• mark[x] indicates whether the node x has lost a child since the
last time x was made a child of another node.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
8
Definition (cont.)
• A Fibonacci heap H is accessed by a pointer min[H]
to the root of a tree containing a minimum key.
– This node is called the minimum node.
• The roots of all trees in the Fibonacci heap H are
linked together into a circular doubly linked list.
– The list is called the root list of H.
– Roots are linked using left and right pointers.
– The order of trees within a root list is arbitrary.
• The number of nodes currently in H is kept in n[H].
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
9
Amortized Analysis
• In amortized analysis, the time required to perform a
sequence of data-structure operations is averaged
over all operations performed.
– It differs from the average-case analysis in that
probability is not involved.
– It guarantees the average performance of each operation
in the worst case.
• The potential method of amortized analysis
represents the prepaid work as “potential” that can
be released for future operations.
– The total “work” on a data structure is spread unevenly
over the course of an algorithm.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
10
The Potential Method
• Start with an initial data structure D0 on which n
operations are performed.
– Let ci, i= 1,...,n be the actual cost of the ith operation.
– Di is the data structure that results after applying the ith
operation on Di-1.
– A potential function  maps each data structure Di to a
real number (Di), which is a potential associated with
Di.
– The amortized cost cai of the ith operation is:
• cai = ci + (Di) - (Di-1)
• It is thus an actual cost of operation plus the increase in potential
due to the operation.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
11
The Potential Method (cont.)
• The total amortized cost of n operations is:
– i=1,ncai = i=1,n(ci + (Di) - (Di-1)) = i=1,nci
+ (Dn) - (D0)
– When (Dn)>(D0), the total amortized cost is an upper bound
on the total actual cost.
• Intuitively, when (Di)-(Di-1) > 0, the amortized
cost of the ith operation represents an overcharge.
– Otherwise, the amortized cost represents an undercharge, and the
actual cost is paid by decrease in potential.
• Different potential functions may yield different amortized
costs, but still be upper bound on the actual costs.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
12
Fibonacci Heap: Potential Function
• For a given Fibonacci heap H, we denote:
– t(H) – the number of trees in the root list.
– m(H) – the number of marked nodes in H.
• The potential of Fibonacci heap H is defined as:
– (H) = t(H) + 2 m(H)
• Assume that a Fibonacci heap application begins
with no heaps.
– The initial potential is 0.
– By above equation, the potential >= 0 in all subsequent
time.
– Hence an upper bound on total amortized cost is also an
upper bound on total actual cost.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
13
Mergeable-Heap Operations
• For basic mergeable-heap operations (Make-Heap,
Insert, Minimum, Extract-Min, Union):
– Each Fibonacci heap is a collection of “unordered”
binomial trees.
• An unordered binomial tree is like a binomial tree, and is defined
recursively.
– The tree U0 contains a single node.
– The tree Uk consists of two unordered binomial trees Uk-1 for which the root
of one is made into any child of the root of another. The following property
is different from the ordered binomial trees.
– For the tree Uk, the root has degree k, which is greater than of any other
node. The children of the root are U0,U1,....Uk-1 in some order.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
14
Creating a New Heap
• The Make-Fib-Heap procedure allocates and returns
the Fibonacci heap object H, where:
– n[H] = 0
– min[H] = NIL
– there are no trees in H.
• The potential is determined by t(H) = 0 and m(H) =
0:
– (H) = 0
– Hence the amortized cost is the same as actual cost, -(1).
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
15
Inserting a Node
This procedure inserts node x into a Fibonacci heap assuming that x is
allocated with a key[x].
Fib-Heap-Insert(H,x)
// Create a linked list containing x only
1 degree[x] = 0
2 p[x] = NIL
3 child[x] = NIL
4 left[x] = x
5 right[x] = x
6 mark[x] = FALSE
7 <concatenate x-list with root list H>
8 if min[H] = NIL or key[x] < key[min[H]]
9
min[H] = x
10 n[H]++
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
16
Inserting Node: Performance
• Let H be the input heap, and H2 be the resulting
heap. Then
– t(H2) = t(H) + 1
– m(H2) = m(H)
• The increase in potential is:
– ((t(H)+1) + 2 m(H)) – (t(H) + 2 m(H)) = 1
• The amortized cost is
– Actual cost + 1 = (1) + 1 = (1)
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
17
Uniting Two Fibonacci Heaps
This procedure unites heaps H1 and H2, destroying them in the process. It
simply concatenates root lists and determines the new minimum node.
Fib-Heap-Union(H1,H2)
1 H = Make-Fib-Heap()
2 min[H] = min[H1]
3 <concatenate the root lists H2 and H>
4 if (min[H1] = NIL) or
(min[H2] <> NIL and
key[min[H2]] < key[min[H1]])
5
min[H] = min[H2]
6 n[H] = n[H1] + n[H2]
7 <free objects H1 and H2>
8 return H
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
18
Union: Performance
• The components of potential are:
– t(H) = t(H1) + t(H2)
– m(H) = m(H1) + m(H2)
• The change in potential is:
– (H) – ((H1) + (H2)) = 0
• The amortized cost is therefore equal to the actual
cost.
– The actual cost is (1) = amortized cost.
7/1/2016
CS583 Fall'06: Binomial and Fibonacci Heaps
19
Download