Assignment 10 -- Due Wednesday, April 11 (at the beginning of lab)
CS 4521 Spring Semester, 2007
20 Points

Topic: Implementation of Binomial Heaps

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:

Of these, the only algorithm not in the text is BINOMIAL-HEAP-MERGE, which you wrote in a previous assignment (the decrease-key and delete operations are not required yet). On page 468, for BINOMIAL-HEAP-EXTRACT-MIN the text assumes, but does not provide, algorithms for: For the former, BINOMIAL-HEAP-MINIMUM on page 462 is a good model, but you must provide the latter. If you don't already have working implementations of these linked list operations, then you may want to test them carefully in isolation before using them in BINOMIAL-HEAP-EXTRACT-MIN.

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.

Test Example

The test files are the same as for binary heaps. Here is the correct output for heaptest2:
+-----------------------------------------------------------------+
|# 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								  |
+-----------------------------------------------------------------+

Displaying The Structure Of A Binomial Heap

One way to do this is to let showBinomialHeap be a non-recursive "driver" that calls a recursive routine showHeap to display a binomial heap rotated 90 degrees. So showHeap could be something like:
  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.

What To Hand In

Hand in the output like the one given above for each of the test files: Identify them clearly and draw in the links between nodes printed by your Show-Binomial-Heap operation.

Also hand in the following:




Page URL: http://www.d.umn.edu /~ddunham/cs4521s07/assignments/a10/assignment.html
Page Author: Doug Dunham
Last Modified: Thursday, 05-Apr-2007 17:55:44 CDT
Comments to: ddunham@d.umn.edu