Class IntDistinctTuples

java.lang.Object
cc.redberry.combinatorics.IntDistinctTuples
All Implemented Interfaces:
IntCombinatorialPort, Serializable

public final class IntDistinctTuples extends Object implements IntCombinatorialPort
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:

 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));
 
This code will produce the following sequence:
 [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:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • previousMask

      private final BitSet previousMask
    • setMasks

      private final BitSet[] setMasks
    • combination

      private final int[] combination
    • temp

      private final BitSet 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, or null if no more distinct tuples exist.
      Specified by:
      take in interface IntCombinatorialPort
      Returns:
      the next tuple, or null if no more distinct tuples exist
    • reset

      public void reset()
      Description copied from interface: IntCombinatorialPort
      Resets the iteration
      Specified by:
      reset in interface IntCombinatorialPort
    • getReference

      public int[] getReference()
      Description copied from interface: IntCombinatorialPort
      Returns the reference to the current iteration element
      Specified by:
      getReference in interface IntCombinatorialPort
      Returns:
      the reference to the current iteration element