The assignment consists of writing code and demonstrating binomial heap operations as described in Chapter 19 of the text. Implementing binomial heaps will require coding the operations:
You can use a modified version of the command interpreter for binary heaps (in Assignment 4); as with that assignment, c creates a heap (i.e. calls MAKE-BINOMIAL-HEAP), and d deletes the minimum key (i.e. calls BINOMIAL-HEAP-EXTRACT-MIN); the merge and union operations are tested indirectly. In addition, you need to write the routine showBinomialHeap which displays the binomial heap structure graphically (see below), rotated 90 degrees as usual.
+-----------------------------------------------------------------+ |# create empty heap | | | |# insert 20 keys | | | |# show heap structure | | | |Structure of binomial heap (rotated 90 degrees counterclockwise):| | | | 1 2 | | | | 3 4 | | | | 5 6 | | | | 7 8 | | | | 9 10 | | | | 11 12 | | | | 13 14 | | | | 15 16 | | | | | | 17 18 | | | | 19 20 | | | | | |# do 10 deletes (extract minimums) with print key flag off | | | |# show heap structure | | | |Structure of binomial heap (rotated 90 degrees counterclockwise):| | | | 13 14 | | | | 15 16 | | | | 17 18 | | | | 19 20 | | | | | | 11 12 | | | | | |# do 10 deletes (extract minimums) with print key flag on | | | |Minimum extracted: 11 | |Minimum extracted: 12 | |Minimum extracted: 13 | |Minimum extracted: 14 | |Minimum extracted: 15 | |Minimum extracted: 16 | |Minimum extracted: 17 | |Minimum extracted: 18 | |Minimum extracted: 19 | |Minimum extracted: 20 | | | |# show heap structure (should be empty) | | | |Structure of binomial heap (rotated 90 degrees counterclockwise):| | | | | | | |# do a delete from empty heap | |Heap Empty | | | |# quit | +-----------------------------------------------------------------+
showHeap( x, depth )
if ( sibling[x] != NIL ) then |> Do sibling list first
showHeap( sibling[x], depth )
|> May have to print a blank line here
if ( ( child[x] != NIL ) or ( p[x] = NIL ) ) then
print key[x] shifted 6*depth + 4 spaces |> First key on a line
if ( child[x] = NIL ) print a blank line |> Special case
else
print key[x] shifted 6 spaces, then a blank line |> Last key on line
if ( child[x] != NIL ) then |> Take care of children last
showHeap( child[x], depth + 1 )
And showBinomialHeap would be something like:
showBinomialHeap(H)
print "Stucture of binomial heap (rotated 90 degrees ccwise):"
if ( head[H] = NIL ) then print "Empty heap"
else showHeap( head[H], 0 )
You may have to adjust the formatting to get good looking output.
Also hand in the following: