net.cscott.jutil

Interface Heap<K,V>

public interface Heap<K,V>

Heaps support create, insert, minimum, extract-min, union, decrease-key, and delete operations. There are three primary implementations, each with different expected run-times:
Procedure BinaryHeap
(worst-case)
BinomialHeap
(worst-case)
FibonacciHeap
(amortized)
MAKE-HEAP Theta(1) Theta(1) Theta(1)
INSERT Theta(lg n) O(lg n) Theta(1)
MINIMUM Theta(1) O(lg n) Theta(1)
EXTRACT-MIN Theta(lg n) Theta(lg n) O(lg n)
UNION Theta(n) O(lg n) Theta(1)
DECREASE-KEY Theta(lg n) Theta(lg n) Theta(1)
UPDATE-KEY Theta(lg n) Theta(lg n) Theta(lg n)
DELETE Theta(lg n) Theta(lg n) O(lg n)
Running times for operations on three implementations of mergable heaps. The number of items in the heap(s) at the time of an operation is denoted by n.
(From "Introduction to Algorithms" by Cormen, Leiserson, and Rivest)

All implementations of Heap should have a no-argument constructor which implements the MAKE-HEAP operation in the above-stated time bound. In addition, certain implementations may also have constructors which take a Map or Heap and construct a heap in less time than it would take to call insert() on each item on an initially-empty Heap. Note that the UPDATE-KEY operation is typically implemented as a delete followed by an insert, which often has worse performance than a DECREASE-KEY operation. However, some algorithms need to increase keys as well as decrease them; there's nothing you can do about that.

Version: $Id: Heap.java,v 1.2 2004/01/13 20:47:05 cananian Exp $

Author: C. Scott Ananian

See Also: BinaryHeap BinomialHeap FibonacciHeap

Method Summary
voidclear()
Removes all entries from this Heap.
Comparator<K>comparator()
Returns the comparator associated with this Heap, or null if it uses its elements' natural ordering.
voiddecreaseKey(Entry<K,V> me, K newkey)
Replace the key in the specified map entry with the specified smaller key.
voiddelete(Entry<K,V> me)
Remove the specified map entry from the mapping.
Collection<Entry<K,V>>entries()
Returns a collection view of all the Map.Entrys in this Heap.
booleanequals(Object o)
Compares the specified object with this heap for equality.
Entry<K,V>extractMinimum()
Remove and return a map entry with minimal key.
inthashCode()
Returns the hash code for this heap.
Entry<K,V>insert(K key, V value)
Inserts a node with the specified key and value into the Heap.
booleanisEmpty()
Returns true if this Heap has no more entries.
Entry<K,V>minimum()
Returns a mapping entry with minimal key.
intsize()
Returns the number of entries in this Heap.
StringtoString()
Returns a string representation of this Heap.
voidunion(Heap<? extends K,? extends V> h)
Merges all of the mappings from the specified Heap into this Heap.
voidupdateKey(Entry<K,V> me, K newkey)
Replace the key in the specified map entry with the specified key, which may be either larger or smaller than its current key.

Method Detail

clear

public void clear()
Removes all entries from this Heap.

comparator

public Comparator<K> comparator()
Returns the comparator associated with this Heap, or null if it uses its elements' natural ordering.

decreaseKey

public void decreaseKey(Entry<K,V> me, K newkey)
Replace the key in the specified map entry with the specified smaller key.

delete

public void delete(Entry<K,V> me)
Remove the specified map entry from the mapping.

entries

public Collection<Entry<K,V>> entries()
Returns a collection view of all the Map.Entrys in this Heap.

equals

public boolean equals(Object o)
Compares the specified object with this heap for equality. Returns true iff the given object is also a Heap and the Collections returned by their entries() methods are equal using the equals() method of Collection.

extractMinimum

public Entry<K,V> extractMinimum()
Remove and return a map entry with minimal key.

Throws: java.util.NoSuchElementException if the heap has no entries.

hashCode

public int hashCode()
Returns the hash code for this heap. The hash code for this heap will be one greater than the hash code for the Collection returned by entries().

insert

public Entry<K,V> insert(K key, V value)
Inserts a node with the specified key and value into the Heap. Returns the generated Map.Entry which may be stored and eventually passed back to decreaseKey() or delete to remove this node.

isEmpty

public boolean isEmpty()
Returns true if this Heap has no more entries.

minimum

public Entry<K,V> minimum()
Returns a mapping entry with minimal key.

Throws: java.util.NoSuchElementException if the heap has no entries.

size

public int size()
Returns the number of entries in this Heap.

toString

public String toString()
Returns a string representation of this Heap.

union

public void union(Heap<? extends K,? extends V> h)
Merges all of the mappings from the specified Heap into this Heap. Note that duplicates are permitted. After calling union(), the Heap passed in as an argument will be empty.

Note that usually efficient implementations of this method require that the Heap argument be from the same implementation as this. (That is, they must both be binomial heaps, or both fibonacci heaps, etc.)

updateKey

public void updateKey(Entry<K,V> me, K newkey)
Replace the key in the specified map entry with the specified key, which may be either larger or smaller than its current key.
Copyright © 2003 C. Scott Ananian