harpoon.Util.Collections
Class FibonacciHeap

java.lang.Object
  |
  +--harpoon.Util.Collections.AbstractHeap
        |
        +--harpoon.Util.Collections.FibonacciHeap
All Implemented Interfaces:
Heap

public class FibonacciHeap
extends AbstractHeap

A FibonacciHeap allows amortized O(1) time bounds for create, insert, minimum, union, and decrease-key operations, and amortized O(lg n) run times for extract-min and delete.

Implementation is based on the description in Introduction to Algorithms by Cormen, Leiserson, and Riverst, in Chapter 21.

Version:
$Id: FibonacciHeap.java,v 1.3 2002/02/26 22:47:36 cananian Exp $
Author:
C. Scott Ananian <cananian@alumni.princeton.edu>

Constructor Summary
FibonacciHeap()
          Creates a new, empty FibonacciHeap, sorted according to its keys' natural order.
FibonacciHeap(Collection collection, Comparator comparator)
          Constructs a new heap from a collection of Map.Entrys and a key comparator.
FibonacciHeap(Comparator c)
          Creates a new, empty FibonacciHeap, sorted according to the given Comparator.
FibonacciHeap(Heap h)
          Constructs a new heap with the same entries as the specified Heap.
 
Method Summary
 void clear()
          Removes all entries from this Heap.
 void decreaseKey(Map.Entry me, Object newkey)
          Replace the key in the specified map entry with the specified smaller key.
 void delete(Map.Entry me)
          Remove the specified map entry from the mapping.
 Collection entries()
          Returns a collection view of all the Map.Entrys in this Heap.
 Map.Entry extractMinimum()
          Remove and return a map entry with minimal key.
protected  void insert(Map.Entry me)
          This method should insert the specified Map.Entry, which is not currently in the Heap, into the Heap.
 Map.Entry insert(Object key, Object value)
          Insert an entry into the heap.
static void main(String[] args)
          Self-test method.
 Map.Entry minimum()
          Returns a mapping entry with minimal key.
protected  Object setKey(Map.Entry me, Object newkey)
          This method should set the key for the specified Map.Entry to the given newkey.
 int size()
          Returns the number of entries in this Heap.
 void union(FibonacciHeap h)
           
 void union(Heap h)
          Merges all of the mappings from the specified Heap into this Heap.
 
Methods inherited from class harpoon.Util.Collections.AbstractHeap
comparator, entryComparator, equals, hashCode, isEmpty, keyComparator, toString, updateKey
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

FibonacciHeap

public FibonacciHeap()
Creates a new, empty FibonacciHeap, sorted according to its keys' natural order. All keys inserted into the new map must implement the Comparable interface. O(1) time.


FibonacciHeap

public FibonacciHeap(Comparator c)
Creates a new, empty FibonacciHeap, sorted according to the given Comparator. O(1) time.


FibonacciHeap

public FibonacciHeap(Heap h)
Constructs a new heap with the same entries as the specified Heap. O(n) time.


FibonacciHeap

public FibonacciHeap(Collection collection,
                     Comparator comparator)
Constructs a new heap from a collection of Map.Entrys and a key comparator. O(n) time.

Method Detail

insert

public Map.Entry insert(Object key,
                        Object value)
Insert an entry into the heap.

Specified by:
insert in interface Heap
Specified by:
insert in class AbstractHeap

insert

protected void insert(Map.Entry me)
Description copied from class: AbstractHeap
This method should insert the specified Map.Entry, which is not currently in the Heap, into the Heap. Implementation is optional, but it is required if you use the default implementation of updateKey().

Overrides:
insert in class AbstractHeap

minimum

public Map.Entry minimum()
Description copied from interface: Heap
Returns a mapping entry with minimal key.

Specified by:
minimum in interface Heap
Specified by:
minimum in class AbstractHeap

union

public void union(FibonacciHeap h)

union

public void union(Heap h)
Description copied from interface: Heap
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.)

Specified by:
union in interface Heap
Overrides:
union in class AbstractHeap

extractMinimum

public Map.Entry extractMinimum()
Description copied from interface: Heap
Remove and return a map entry with minimal key.

Specified by:
extractMinimum in interface Heap
Overrides:
extractMinimum in class AbstractHeap

decreaseKey

public void decreaseKey(Map.Entry me,
                        Object newkey)
Description copied from interface: Heap
Replace the key in the specified map entry with the specified smaller key.

Specified by:
decreaseKey in interface Heap
Specified by:
decreaseKey in class AbstractHeap

delete

public void delete(Map.Entry me)
Description copied from interface: Heap
Remove the specified map entry from the mapping.

Specified by:
delete in interface Heap
Specified by:
delete in class AbstractHeap

size

public int size()
Description copied from interface: Heap
Returns the number of entries in this Heap.

Specified by:
size in interface Heap
Specified by:
size in class AbstractHeap

clear

public void clear()
Description copied from interface: Heap
Removes all entries from this Heap.

Specified by:
clear in interface Heap
Specified by:
clear in class AbstractHeap

entries

public Collection entries()
Description copied from interface: Heap
Returns a collection view of all the Map.Entrys in this Heap.

Specified by:
entries in interface Heap
Specified by:
entries in class AbstractHeap

setKey

protected final Object setKey(Map.Entry me,
                              Object newkey)
Description copied from class: AbstractHeap
This method should set the key for the specified Map.Entry to the given newkey. Implementation is optional, but it is required if you use the default implementation of updateKey().

Overrides:
setKey in class AbstractHeap

main

public static void main(String[] args)
Self-test method.