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 Show-Binomial-Heap 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 | +-----------------------------------------------------------------+
Show-Binomial-Heap(H)
depth <- 0
Process-Siblings-Backwards(head[H],depth)
Process-Siblings-Backwards(x,depth)
if x not = NIL then
Process-Siblings-Backwards(sibling[x],depth)
Show-Binomial-Tree(x,depth)
Show-Binomial-Tree(x,depth)
... you write this ...
Hint: in Show-Binomial-Tree, compute the number of spaces
to shift to the right based on depth and print
x's key value, then call
Process-Siblings-Backwards to handle x's
children (which are also in a linked list). You will probably need to
print blank "spacing" lines in one or more of the procedures.
Hand in well-documented code for both your command interpreter and your
heap operations, in separate modules. Provide pseudocode for your
auxiliary LL-UNLINK-MIN and LL-REVERSE algorithms used in
BINOMIAL-HEAP-EXTRACT-MIN. Also provide pseudocode for your
Show-Binomial-Tree algorithm.