public class IndexMinPQ<Key extends java.lang.Comparable<Key>> extends java.lang.Object implements java.lang.Iterable<java.lang.Integer>
This implementation uses a binary heap along with an array to associate keys with integers in the given range. The insert, delete-the-minimum, delete, change-key, decrease-key, and increase-key operations take logarithmic time. The is-empty, size, min-index, min-key, and key-of operations take constant time. Construction takes time proportional to the specified capacity.
For additional documentation, see Section 2.4 of Algorithms, 4th Edition, by Robert Sedgewick and Kevin Wayne.
Constructor and Description |
---|
IndexMinPQ(int NMAX)
Initializes an empty indexed priority queue with indices between 0 and NMAX-1.
|
Modifier and Type | Method and Description |
---|---|
void |
change(int i,
Key key)
Deprecated.
Replaced by changeKey()
|
void |
changeKey(int i,
Key key)
Change the key associated with index i to the specified value.
|
boolean |
contains(int i)
Is i an index on the priority queue?
|
void |
decreaseKey(int i,
Key key)
Decrease the key associated with index i to the specified value.
|
void |
delete(int i)
Remove the key associated with index i.
|
int |
delMin()
Removes a minimum key and returns its associated index.
|
void |
increaseKey(int i,
Key key)
Increase the key associated with index i to the specified value.
|
void |
insert(int i,
Key key)
Associates key with index i.
|
boolean |
isEmpty()
Is the priority queue empty?
|
java.util.Iterator<java.lang.Integer> |
iterator()
Returns an iterator that iterates over the keys on the
priority queue in ascending order.
|
Key |
keyOf(int i)
Returns the key associated with index i.
|
static void |
main(java.lang.String[] args)
Unit tests the IndexMinPQ data type.
|
int |
minIndex()
Returns an index associated with a minimum key.
|
Key |
minKey()
Returns a minimum key.
|
int |
size()
Returns the number of keys on the priority queue.
|
public IndexMinPQ(int NMAX)
NMAX
- the keys on the priority queue are index from 0 to NMAX-1java.lang.IllegalArgumentException
- if NMAX < 0public boolean isEmpty()
public boolean contains(int i)
i
- an indexjava.lang.IndexOutOfBoundsException
- unless (0 ≤ i < NMAX)public int size()
public void insert(int i, Key key)
i
- an indexkey
- the key to associate with index ijava.lang.IndexOutOfBoundsException
- unless 0 ≤ i < NMAXjava.util.IllegalArgumentException
- if there already is an item associated with index ipublic int minIndex()
java.util.NoSuchElementException
- if priority queue is emptypublic Key minKey()
java.util.NoSuchElementException
- if priority queue is emptypublic int delMin()
java.util.NoSuchElementException
- if priority queue is emptypublic Key keyOf(int i)
i
- the index of the key to returnjava.lang.IndexOutOfBoundsException
- unless 0 ≤ i < NMAXjava.util.NoSuchElementException
- no key is associated with index i@Deprecated public void change(int i, Key key)
i
- the index of the key to changekey
- change the key assocated with index i to this keyjava.lang.IndexOutOfBoundsException
- unless 0 ≤ i < NMAXpublic void changeKey(int i, Key key)
i
- the index of the key to changekey
- change the key assocated with index i to this keyjava.lang.IndexOutOfBoundsException
- unless 0 ≤ i < NMAXjava.util.NoSuchElementException
- no key is associated with index ipublic void decreaseKey(int i, Key key)
i
- the index of the key to decreasekey
- decrease the key assocated with index i to this keyjava.lang.IndexOutOfBoundsException
- unless 0 ≤ i < NMAXjava.lang.IllegalArgumentException
- if key ≥ key associated with index ijava.util.NoSuchElementException
- no key is associated with index ipublic void increaseKey(int i, Key key)
i
- the index of the key to increasekey
- increase the key assocated with index i to this keyjava.lang.IndexOutOfBoundsException
- unless 0 ≤ i < NMAXjava.lang.IllegalArgumentException
- if key ≤ key associated with index ijava.util.NoSuchElementException
- no key is associated with index ipublic void delete(int i)
i
- the index of the key to removejava.lang.IndexOutOfBoundsException
- unless 0 ≤ i < NMAXjava.util.NoSuchElementException
- no key is associated with index ipublic java.util.Iterator<java.lang.Integer> iterator()
iterator
in interface java.lang.Iterable<java.lang.Integer>
public static void main(java.lang.String[] args)