Package cc.redberry.combinatorics
Class IntDistinctTuples
- java.lang.Object
-
- cc.redberry.combinatorics.IntDistinctTuples
-
- All Implemented Interfaces:
IntCombinatorialPort,java.io.Serializable
public final class IntDistinctTuples extends java.lang.Object implements IntCombinatorialPort
Iterator over all distinct N-tuples, which can be chosen fromNsets of integers. More formally, forNinteger 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:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface cc.redberry.combinatorics.IntCombinatorialPort
IntCombinatorialPort.Iterator
-
-
Field Summary
Fields Modifier and Type Field Description private int[]combinationprivate java.util.BitSetpreviousMaskprivate static longserialVersionUIDprivate java.util.BitSet[]setMasksprivate bytestateprivate java.util.BitSettemp
-
Constructor Summary
Constructors Constructor Description IntDistinctTuples(int[]... sets)Create iterator over distinct tuples formed from the specified arrays (each set will be sorted in place)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int[]getReference()Returns the reference to the current iteration elementprivate voidinit()voidreset()Resets the iterationint[]take()Calculates and returns the next tuple, ornullif no more distinct tuples exist.
-
-
-
Field Detail
-
serialVersionUID
private static final long serialVersionUID
- See Also:
- Constant Field Values
-
previousMask
private final java.util.BitSet previousMask
-
setMasks
private final java.util.BitSet[] setMasks
-
combination
private final int[] combination
-
temp
private final java.util.BitSet temp
-
state
private byte state
-
-
Method Detail
-
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
-
-