EECS 380 Homework 4

Winter Semester '01

Assigned Tuesday March 20 2001.
Due Thursday, March 29th, 6pm, EECS 380 box in room 2420 EECS

Update: For part 3 you only need to provide data for N<=20.

1. Ternary heaps

You have been exposed to binary heaps in class and in your text. Further, it has been shown how to use a heap to implement a priority queue.

Implement a priority queue class with the same interface as priority_queue in STL (you can specialize it to doubles if you don't feel comfortable with templates), but such that it uses ternary heaps internally. Feel free to reuse and modify any code from Sedgewick (although you should comment your code so it is clear what you have borrowed) and use STL components (classes, functions, adapters, etc).

2. Heapsort

Implement heapsort using priority queues, namely use STL's priority_queue class (that is based on binary-heap operations) and your own implementation based on ternary-heap operations. Race the two priority queues against each other within the context of heapsort. You need to conclude whether ternary heaps are any better than binary heaps. Supply a plot which shows how each performs as you vary N. Provide enough data points over a wide enough range that the general shape of the curves is obvious and so the relationship between the two heapsorts is obvious. Note: you should not call the STL's heapsort. Rather use the STL's priority queue to perform a heapsort.

Discuss the advantages and drawbacks of ternary heaps compared to binary heaps.

3. Some math

Say we take an array of size N where the value of each element in the array is chosen randomly (with a uniform probability over a range large enough that repeated values are very unlikely). What are the odds that such an array is in binary heap order? Ternary heap order?

You may answer this question using a number of techniques.

• You may empirically evaluate this number for all values less than or equal to 20 by randomly producing ``enough'' arrays to be confident that your values for each `N' is very close.
• You may provide a mathematical formula, with an explanation, which answers this question for an arbitrary value of N. Ideally this formula would be a closed form solution. Your explanation must be clear enough that our graders can understand it.
• You may use some other technique (other than looking it up or asking someone!) which solves the problem for values less than or equal to 20.
Provide a graph which shows both probabilities displayed out to a value of 20. Figuring out a good way to display this data so that the graph is informative is a part of the assignment!

Turn-in list

• Your source code for the ternary heap and the priority queue.
• Your code for the heapsort
• The graph showing the speeds of the STL based heapsort and the ternary-heap heapsort.
• A paragraph or two discussing the advantages and drawbacks of ternary heaps compared to binary heaps.
• Source code or formula with explanation, or whatever you used to answer this question.
• A readable graph of the probabilities up to N=20

Terms/hints

A ternary heap is one where the heap is implemented on a complete 3-tree (see page 233 of our text). Remember that complete M-trees can be implemented fairly easily on an array.