Class DoubleRadixAddressableHeap<V>
- Type Parameters:
V- the type of values maintained by this heap
- All Implemented Interfaces:
Serializable,AddressableHeap<Double,V>
Note that this implementation uses the fact that the IEEE floating-point standard has the property that for any valid floating-point numbers a and b, a<=b if and only if bits(a)<= bits(b), where bits(x) denotes the re-interpretation of x as an unsigned integer (long in our case).
The implementation use arrays in order to store the elements. Operations
insert and findMin are worst-case constant time. The cost of
operation deleteMin is amortized O(logC) assuming the radix-heap
contains keys in the range [0, C] or equivalently
[a,a+C]. Note, however, that C here depends on the distance of the
minimum and maximum value when they are translated into unsigned longs.
Note that this implementation is not synchronized. If multiple threads access a heap concurrently, and at least one of the threads modifies the heap structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more elements or changing the key of some element.) This is typically accomplished by synchronizing on some object that naturally encapsulates the heap.
- Author:
- Dimitrios Michail
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.jheaps.AddressableHeap
AddressableHeap.Handle<K,V> -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected org.jheaps.monotone.AbstractRadixAddressableHeap<Double,V>.org.jheaps.monotone.AbstractRadixAddressableHeap.Node[] The buckets as lists.protected org.jheaps.monotone.AbstractRadixAddressableHeap<Double,V>.org.jheaps.monotone.AbstractRadixAddressableHeap.Node The current minimum value (cached)protected static final intDenotes that a key does not belong to a bucketprotected DoubleLast deleted key.protected DoubleMaximum key allowedprotected DoubleMinimum key allowedprotected longNumber of elements -
Constructor Summary
ConstructorsConstructorDescriptionDoubleRadixAddressableHeap(double minKey, double maxKey) Constructs a new heap which can store values between a minimum and a maximum key value (inclusive). -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Clear all the elements of the heap.Comparator<? super Double> Always returnsnullsince this heap uses the natural ordering of its keys.protected intCompares its two arguments for order.protected intcomputeBucket(Double key, Double minKey) Compute the bucket of a key based on a minimum key.Delete and return an element with the minimum key.findMin()Find an element with the minimum key.Insert a new element into the heap with a null value.Insert a new element into the heap.booleanisEmpty()Returnstrueif this heap is empty.protected intCompute the most significant digit which is different in the binary representation of two values, or -1 if numbers are equal.longsize()Returns the number of elements in the heap.
-
Field Details
-
EMPTY
protected static final int EMPTYDenotes that a key does not belong to a bucket- See Also:
-
buckets
protected org.jheaps.monotone.AbstractRadixAddressableHeap<Double,V>.org.jheaps.monotone.AbstractRadixAddressableHeap.Node[] bucketsThe buckets as lists. -
size
protected long sizeNumber of elements -
lastDeletedKey
Last deleted key. This value is used to distribute elements in the buckets. Should be initialized with theminKeyvalue. -
currentMin
protected org.jheaps.monotone.AbstractRadixAddressableHeap<Double,V>.org.jheaps.monotone.AbstractRadixAddressableHeap.Node currentMinThe current minimum value (cached) -
minKey
Minimum key allowed -
maxKey
Maximum key allowed
-
-
Constructor Details
-
DoubleRadixAddressableHeap
public DoubleRadixAddressableHeap(double minKey, double maxKey) Constructs a new heap which can store values between a minimum and a maximum key value (inclusive). It is important to use the smallest key range as the heap uses O(logC) where C=maxKey-minKey+1 buckets to store elements. Moreover, the operationdeleteMinrequires amortized O(logC) time.- Parameters:
minKey- the non-negative minimum key that this heap supports (inclusive)maxKey- the maximum key that this heap supports (inclusive)- Throws:
IllegalArgumentException- if the minimum key is negativeIllegalArgumentException- if the maximum key is less than the minimum key
-
-
Method Details
-
compare
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.- Parameters:
o1- the first object to be compared.o2- the second object to be compared.- Returns:
- a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
-
msd
Compute the most significant digit which is different in the binary representation of two values, or -1 if numbers are equal.- Parameters:
a- the first valueb- the second value- Returns:
- the most significant digit which is different or -1 if numbers are equal
-
findMin
Find an element with the minimum key.- Specified by:
findMinin interfaceAddressableHeap<K,V> - Returns:
- a handle to an element with minimum key
-
insert
Insert a new element into the heap with a null value.- Specified by:
insertin interfaceAddressableHeap<K,V> - Parameters:
key- the element's key- Returns:
- a handle for the newly added element
- Throws:
IllegalArgumentException- if the key is nullIllegalArgumentException- if the key is less than the minimum allowed keyIllegalArgumentException- if the key is more than the maximum allowed keyIllegalArgumentException- if the key is less than the last deleted key (or the minimum key allowed if no key has been deleted)
-
insert
Insert a new element into the heap.- Specified by:
insertin interfaceAddressableHeap<K,V> - Parameters:
key- the element's keyvalue- the element's value- Returns:
- a handle for the newly added element
- Throws:
IllegalArgumentException- if the key is nullIllegalArgumentException- if the key is less than the minimum allowed keyIllegalArgumentException- if the key is more than the maximum allowed keyIllegalArgumentException- if the key is less than the last deleted key (or the minimum key allowed if no key has been deleted)
-
deleteMin
Delete and return an element with the minimum key. If multiple such elements exists, only one of them will be deleted. After the element is deleted the handle is invalidated and only methodAddressableHeap.Handle.getKey()andAddressableHeap.Handle.getValue()can be used. The cost of this operation is amortized O(logC) assuming the heap contains keys in the range [0, C] or equivalently [a, a+C].- Specified by:
deleteMinin interfaceAddressableHeap<K,V> - Returns:
- a handle to the deleted element with minimum key
-
isEmpty
public boolean isEmpty()Returnstrueif this heap is empty.- Specified by:
isEmptyin interfaceAddressableHeap<K,V> - Returns:
trueif this heap is empty,falseotherwise
-
size
public long size()Returns the number of elements in the heap.- Specified by:
sizein interfaceAddressableHeap<K,V> - Returns:
- the number of elements in the heap
-
clear
public void clear()Clear all the elements of the heap. After calling this method all handles should be considered invalidated and the behavior of methodsAddressableHeap.Handle.decreaseKey(Object)andAddressableHeap.Handle.delete()is undefined.- Specified by:
clearin interfaceAddressableHeap<K,V>
-
comparator
Always returnsnullsince this heap uses the natural ordering of its keys.- Specified by:
comparatorin interfaceAddressableHeap<K,V> - Returns:
nullsince this heap uses the natural ordering of its keys
-
computeBucket
Compute the bucket of a key based on a minimum key.- Parameters:
key- the keyminKey- the minimum key- Returns:
- the bucket where the key should go
-