Class CombinationSampler
- java.lang.Object
-
- org.apache.commons.rng.sampling.CombinationSampler
-
- All Implemented Interfaces:
ObjectSampler<int[]>
,SharedStateObjectSampler<int[]>
,SharedStateSampler<SharedStateObjectSampler<int[]>>
public class CombinationSampler extends Object implements SharedStateObjectSampler<int[]>
Class for representing combinations of a sequence of integers.A combination is a selection of items from a collection, such that (unlike permutations) the order of selection does not matter. This sampler can be used to generate a combination in an unspecified order and is faster than the corresponding
PermutationSampler
.Note that the sample order is unspecified. For example a sample combination of 2 from 4 may return
[0,1]
or[1,0]
as the two are equivalent, and the order of a given combination may change in subsequent samples.The sampler can be used to generate indices to select subsets where the order of the subset is not important.
Sampling uses
UniformRandomProvider.nextInt(int)
.- See Also:
PermutationSampler
-
-
Constructor Summary
Constructors Constructor Description CombinationSampler(UniformRandomProvider rng, int n, int k)
Creates a generator of combinations.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int[]
sample()
Return a combination ofk
whose entries are selected randomly, without repetition, from the integers 0, 1, ...,n
-1 (inclusive).CombinationSampler
withUniformRandomProvider(UniformRandomProvider rng)
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.
-
-
-
Constructor Detail
-
CombinationSampler
public CombinationSampler(UniformRandomProvider rng, int n, int k)
Creates a generator of combinations.The
sample()
method will generate an integer array of lengthk
whose entries are selected randomly, without repetition, from the integers 0, 1, ...,n
-1 (inclusive). The returned array represents a combination ofn
takenk
.In contrast to a permutation, the returned array is not guaranteed to be in a random order. The
sample()
method returns the array in an unspecified order.If
n <= 0
ork <= 0
ork > n
then no combination is required and an exception is raised.- Parameters:
rng
- Generator of uniformly distributed random numbers.n
- Domain of the combination.k
- Size of the combination.- Throws:
IllegalArgumentException
- ifn <= 0
ork <= 0
ork > n
.
-
-
Method Detail
-
sample
public int[] sample()
Return a combination ofk
whose entries are selected randomly, without repetition, from the integers 0, 1, ...,n
-1 (inclusive).The order of the returned array is not guaranteed to be in a random order as the order of a combination does not matter.
- Specified by:
sample
in interfaceObjectSampler<int[]>
- Returns:
- a random combination.
-
withUniformRandomProvider
public CombinationSampler withUniformRandomProvider(UniformRandomProvider rng)
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.- Specified by:
withUniformRandomProvider
in interfaceSharedStateSampler<SharedStateObjectSampler<int[]>>
- Parameters:
rng
- Generator of uniformly distributed random numbers.- Returns:
- the sampler
- Since:
- 1.3
-
-