Package cc.redberry.combinatorics
Class IntDistinctTuples
java.lang.Object
cc.redberry.combinatorics.IntDistinctTuples
- All Implemented Interfaces:
IntCombinatorialPort,Serializable
Iterator over all distinct N-tuples, which can be chosen from
N sets of integers. More formally, for
N integer arrays: array1, array2,...,arrayN, this class allows
to iterate over all possible integer arrays of the form [i1, i2,...,iN], where all
numbers numbers ij are different and i1 is chosen from array1, i2
is chosen from array2 and so on.
Consider the example:
This code will produce the following sequence:
int[] a1 = {1, 2, 3};
int[] a2 = {2, 3};
IntDistinctTuples tuples = new IntDistinctTuples(a1, a2);
int[] tuple;
while ((tuple = tuples.take()) != null)
System.out.println(Arrays.toString(tuple));
[1, 2]
[1, 3]
[2, 3]
[3, 2]
This class is implemented via output port pattern and the calculation of the next tuple occurs only on the
invocation of take().
Note: method take() returns the same reference on each invocation.
- Since:
- 1.0
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from interface cc.redberry.combinatorics.IntCombinatorialPort
IntCombinatorialPort.Iterator -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionIntDistinctTuples(int[]... sets) Create iterator over distinct tuples formed from the specified arrays (each set will be sorted in place) -
Method Summary
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
previousMask
-
setMasks
-
combination
private final int[] combination -
temp
-
state
private byte state
-
-
Constructor Details
-
IntDistinctTuples
public IntDistinctTuples(int[]... sets) Create iterator over distinct tuples formed from the specified arrays (each set will be sorted in place)
-
-
Method Details
-
init
private void init() -
take
public int[] take()Calculates and returns the next tuple, ornullif no more distinct tuples exist.- Specified by:
takein interfaceIntCombinatorialPort- Returns:
- the next tuple, or
nullif no more distinct tuples exist
-
reset
public void reset()Description copied from interface:IntCombinatorialPortResets the iteration- Specified by:
resetin interfaceIntCombinatorialPort
-
getReference
public int[] getReference()Description copied from interface:IntCombinatorialPortReturns the reference to the current iteration element- Specified by:
getReferencein interfaceIntCombinatorialPort- Returns:
- the reference to the current iteration element
-