java.lang.Object
org.apache.lucene.util.Selector
org.apache.lucene.util.RadixSelector
Radix selector.
This implementation works similarly to a MSB radix sort except that it only recurses into the sub partition that contains the desired value.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final int[]private final int[]private static final intprivate static final intprivate static final intprivate final int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate booleanassertHistogram(int commonPrefixLength, int[] histogram) private voidbuildHistogram(int from, int to, int k, int[] histogram) Build an histogram of the k-th characters of values occurring between offsetsfromandto, usinggetBucket(int, int).protected abstract intbyteAt(int i, int k) Return the k-th byte of the entry at indexi, or-1if its length is less than or equal tok.private intcomputeCommonPrefixLengthAndBuildHistogram(int from, int to, int k, int[] histogram) Build a histogram of the number of values perbucketand return a common prefix length for all visited values.private intcomputeCommonPrefixLengthAndBuildHistogramPart1(int from, int to, int k, int[] histogram, int commonPrefixLength) private intcomputeCommonPrefixLengthAndBuildHistogramPart2(int from, int to, int k, int[] histogram, int commonPrefixLength, int i) private intcomputeInitialCommonPrefixLength(int from, int k) private intgetBucket(int i, int k) Return a number for the k-th character between 0 andHISTOGRAM_SIZE.protected SelectorgetFallbackSelector(int d) Get a fall-back selector which may assume that the firstdbytes of all compared strings are equal.private voidpartition(int from, int to, int bucket, int bucketFrom, int bucketTo, int d) Reorder elements so that all of them that fall intobucketare between offsetsbucketFromandbucketTo.private voidradixSelect(int from, int to, int k, int d, int l) voidselect(int from, int to, int k) Reorder elements so that the element at positionkis the same as if all elements were sorted and all other elements are partitioned around it:[from, k)only contains elements that are less than or equal tokand(k, to)only contains elements that are greater than or equal tok.private voidselect(int from, int to, int k, int d, int l)
-
Field Details
-
LEVEL_THRESHOLD
private static final int LEVEL_THRESHOLD- See Also:
-
HISTOGRAM_SIZE
private static final int HISTOGRAM_SIZE- See Also:
-
LENGTH_THRESHOLD
private static final int LENGTH_THRESHOLD- See Also:
-
histogram
private final int[] histogram -
commonPrefix
private final int[] commonPrefix -
maxLength
private final int maxLength
-
-
Constructor Details
-
RadixSelector
protected RadixSelector(int maxLength) Sole constructor.- Parameters:
maxLength- the maximum length of keys, passInteger.MAX_VALUEif unknown.
-
-
Method Details
-
byteAt
protected abstract int byteAt(int i, int k) Return the k-th byte of the entry at indexi, or-1if its length is less than or equal tok. This may only be called with a value ofkbetween0included andmaxLengthexcluded. -
getFallbackSelector
Get a fall-back selector which may assume that the firstdbytes of all compared strings are equal. This fallback selector is used when the range becomes narrow or when the maximum level of recursion has been exceeded. -
select
public void select(int from, int to, int k) Description copied from class:SelectorReorder elements so that the element at positionkis the same as if all elements were sorted and all other elements are partitioned around it:[from, k)only contains elements that are less than or equal tokand(k, to)only contains elements that are greater than or equal tok. -
select
private void select(int from, int to, int k, int d, int l) -
radixSelect
private void radixSelect(int from, int to, int k, int d, int l) - Parameters:
d- the character number to comparel- the level of recursion
-
assertHistogram
private boolean assertHistogram(int commonPrefixLength, int[] histogram) -
getBucket
private int getBucket(int i, int k) Return a number for the k-th character between 0 andHISTOGRAM_SIZE. -
computeCommonPrefixLengthAndBuildHistogram
private int computeCommonPrefixLengthAndBuildHistogram(int from, int to, int k, int[] histogram) Build a histogram of the number of values perbucketand return a common prefix length for all visited values.- See Also:
-
computeInitialCommonPrefixLength
private int computeInitialCommonPrefixLength(int from, int k) -
computeCommonPrefixLengthAndBuildHistogramPart1
private int computeCommonPrefixLengthAndBuildHistogramPart1(int from, int to, int k, int[] histogram, int commonPrefixLength) -
computeCommonPrefixLengthAndBuildHistogramPart2
private int computeCommonPrefixLengthAndBuildHistogramPart2(int from, int to, int k, int[] histogram, int commonPrefixLength, int i) -
buildHistogram
private void buildHistogram(int from, int to, int k, int[] histogram) Build an histogram of the k-th characters of values occurring between offsetsfromandto, usinggetBucket(int, int). -
partition
private void partition(int from, int to, int bucket, int bucketFrom, int bucketTo, int d) Reorder elements so that all of them that fall intobucketare between offsetsbucketFromandbucketTo.
-