java.lang.Object
org.cicirello.sequences.SequenceReservoirSampler
SequenceReservoirSampler is a class of utility methods for efficiently generating random samples
of array elements, without replacement.
The methods of this class use the reservoir sampling algorithm (Algorithm R) from J. Vitter's 1985 article "Random Sampling with a Reservoir" from ACM Transactions on Mathematical Software.
The runtime of the sample methods is O(n) and it generates O(n-k) random numbers. Thus, it is an especially good choice as k approaches n. Only constant extra space required.
-
Method Summary
Modifier and TypeMethodDescriptionstatic byte[]sample(byte[] source, int k, byte[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.static char[]sample(char[] source, int k, char[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.static double[]sample(double[] source, int k, double[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.static float[]sample(float[] source, int k, float[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.static int[]sample(int[] source, int k, int[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.static long[]sample(long[] source, int k, long[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.static short[]sample(short[] source, int k, short[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.static char[]sample(String source, int k, char[] target, RandomGenerator r) Generates a random sample of k chars, without replacement, from a given source String.static <T> T[]sample(T[] source, int k, T[] target, RandomGenerator r) Generates a random sample of k elements, without replacement, from a given source array.
-
Method Details
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k chars, without replacement, from a given source String. All n choose k combinations are equally likely, where n is the length of the source String.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length()).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.length()NegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-
sample
Generates a random sample of k elements, without replacement, from a given source array. All n choose k combinations are equally likely, where n is the length of the source array.- Type Parameters:
T- The type of array elements.- Parameters:
source- The source array to sample.k- The number of random samples (must be no greater than source.length).target- An array to hold the result. If target is null or target.length is less than k, then this method will construct a new array for the result.r- The source of randomness.- Returns:
- An array containing the random sample.
- Throws:
IllegalArgumentException- if k > source.lengthNegativeArraySizeException- if k < 0
-