0% found this document useful (0 votes)
306 views26 pages

Binomial Heaps PDF

Binomial heaps are a data structure that combines multiple binomial trees into a single heap structure. A binomial tree is a tree where each node has either 0 or 2 children, and the root has the maximum number of children. Binomial heaps support operations like insertion, deletion, and union of heaps in O(log n) time by manipulating the underlying binomial tree structure. Key operations include linking trees during unions, extracting minimum elements, and decreasing keys by cascading cuts up the tree.

Uploaded by

Boopathi Thee
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
306 views26 pages

Binomial Heaps PDF

Binomial heaps are a data structure that combines multiple binomial trees into a single heap structure. A binomial tree is a tree where each node has either 0 or 2 children, and the root has the maximum number of children. Binomial heaps support operations like insertion, deletion, and union of heaps in O(log n) time by manipulating the underlying binomial tree structure. Key operations include linking trees during unions, extracting minimum elements, and decreasing keys by cascading cuts up the tree.

Uploaded by

Boopathi Thee
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 26

Binomial Heaps

Referred to MIT Press: Introduction to Algorithms 2nd Edition

Binomial Trees
The binomial tree B(k) is an ordered tree defined recursively. As shown in the binomial tree B(0) consists of a single node. The binomial tree B(k) consists of two binomial trees B(k-1) that are linked together: the root of one is the leftmost child of the root of the other.

Properties of binomial trees For the binomial tree B(k), 1. there are 2^k nodes, 2. the height of the tree is k, 3. there are exactly k!/(i!(k-i)!) nodes at depth i for i = 0, 1, ..., k, and 4. the root has degree k, which is greater than that of any other node; moreover if i the children of the root are numbered from left to right by k - 1, k - 2, ..., 0, child i is the root of a subtree B(i).

Binomial Heaps
A binomial heap H is a set of binomial trees that satisfies the following binomial-heap properties. 1. Each binomial tree in H obeys the min-heap property: the key of a node is greater than or equal to the key of its parent. We say that each such tree is min-heap-ordered. 2. For any nonnegative integer k, there is at most one binomial tree in H whose root has degree k.

Representing binomial heaps

Creating a new binomial heap


To make an empty binomial heap, the MAKE-BINOMIAL-HEAP procedure simply allocates and returns an object H , where head[H ] = NIL. The running time is (1).

Finding the minimum key


The procedure BINOMIAL-HEAP-MINIMUM returns a pointer to the node with the minimum key in an n-node binomial heap H. This implementation assumes that there are no keys with value . BINOMIAL-HEAP-MINIMUM(H) 1 y NIL 2 x head[H] 3 min 4 while x NIL 5 do if key[x] < min 6 then min key[x] 7 yx 8 x sibling[x] 9 return y

Uniting two binomial heaps The BINOMIAL-HEAP-UNION procedure repeatedly links binomial trees whose roots have the same degree. The following procedure links the B(k-1) tree rooted at node y to the B(k-1) tree rooted at node z; that is, it makes z the parent of y. Node z thus becomes the root of a B(k) tree. BINOMIAL-LINK(y, z) 1 p[y] z 2 sibling[y] child[z] 3 child[z] y 4 degree[z] degree[z] + 1

The following procedure unites binomial heaps H1 and H2, returning the resulting heap. It destroys the representations of H1 and H2 in the process. Besides BINOMIAL-LINK, the procedure uses an auxiliary procedure BINOMIAL-HEAPMERGE that merges the root lists of H1 and H2 into a single linked list that is sorted by degree into monotonically increasing order.
BINOMIAL-HEAP-UNION(H1, H2) 1 H MAKE-BINOMIAL-HEAP() 2 head[H] BINOMIAL-HEAP-MERGE(H1, H2) 3 free the objects H1 and H2 but not the lists they point to 4 if head[H] = NIL 5 then return H 6 prev-x NIL 7 x head[H] 8 next-x sibling[x]

9 while next-x NIL 10 do if (degree[x] degree[next-x]) or (sibling[next-x] NIL and degree[sibling[next-x]] =degree[x] ) 11 then prev-x x Cases 1 and 2 12 x next-x Cases 1 and 2(see the figure 2, 5) 13 else if key[x] key[next-x] 14 then sibling[x] sibling[next-x] Case 3 15 BINOMIAL-LINK(next-x, x) Case 3 (1, 4) 16 else if prev-x = NIL Case 4 17 then head[H] next-x Case 4 18 else sibling[prev-x] next-x Case 4 19 BINOMIAL-LINK(x, next-x) Case 4 20 x next-x Case 4 (3) 21 next-x sibling[x] 22 return H

back

back

back

back

back

Inserting a node
The following procedure inserts node x into binomial heap H , assuming that x has already been allocated and key[x] has already been filled in.

BINOMIAL-HEAP-INSERT(H, x) 1 H MAKE-BINOMIAL-HEAP() 2 p[x] NIL 3 child[x] NIL 4 sibling[x] NIL 5 degree[x] 0 6 head[H] x 7 H BINOMIAL-HEAP-UNION(H, H)

Extracting the node with the minimum key


The following procedure extracts the node with the minimum key from binomial heap H and returns a pointer to the extracted node.

BINOMIAL-HEAP-EXTRACT-MIN(H) 1 find the root x with the minimum key in the root list of H, and remove x from the root list of H (see the figure) 2 H MAKE-BINOMIAL-HEAP() 3 reverse the order of the linked list of x's children, and set head[H] to point to the head of the resulting list (see the figure) 4 H BINOMIAL-HEAP-UNION(H, H) 5 return x

back

back

Decreasing a key
The following procedure decreases the key of a node x in a binomial heap H to a new value k. It signals an error if k is greater than x's current key. BINOMIAL-HEAP-DECREASE-KEY(H, x, k) 1 if k > key[x] 2 then error "new key is greater than current key" 3 key[x] k 4yx 5 z p[y] 6 while z NIL and key[y] < key[z] 7 do exchange key[y] key[z] 8 If y and z have satellite fields, exchange them, too. 9 yz 10 z p[y] (see the figure)

back

Deleting a key
It is easy to delete a node x's key and satellite information from binomial heap H in O(lg n) time. The following implementation assumes that no node currently in the binomial heap has a key of -. BINOMIAL-HEAP-DELETE(H, x) 1 BINOMIAL-HEAP-DECREASE-KEY(H, x, -) 2 BINOMIAL-HEAP-EXTRACT-MIN(H)

Exercise 1 Draw the result after inserting nodes with integer keys from 1 through 15 into an empty binomial heap in reverse order.

Exercise 2 Draw the result after deleting the node with key 8 from the final binomial heap in exercise 1.

Solution to exercise 1

Solution to exercise 2

You might also like