Package groovy.util

Class PermutationGenerator<E>

java.lang.Object
groovy.util.PermutationGenerator<E>
All Implemented Interfaces:
Iterator<List<E>>

public class PermutationGenerator<E> extends Object implements Iterator<List<E>>
Systematically generate permutations. Adapted from Java Code by Michael Gilleland (released with no restrictions) using an algorithm described here: Kenneth H. Rosen, Discrete Mathematics and Its Applications, 2nd edition (NY: McGraw-Hill, 1991), pp. 282-284
  • Constructor Details

    • PermutationGenerator

      public PermutationGenerator(Collection<E> items)
      WARNING: Don't make n too large. Recall that the number of permutations is n! which can be very large, even when n is as small as 20 -- 20! = 2,432,902,008,176,640,000 and 21! is too big to fit into a Java long, which is why we use BigInteger instead.
      Parameters:
      items - the items to permute
    • PermutationGenerator

      public PermutationGenerator(Iterable<E> items)
  • Method Details

    • reset

      public void reset()
    • getTotal

      public BigInteger getTotal()
    • hasNext

      public boolean hasNext()
      Specified by:
      hasNext in interface Iterator<E>
    • next

      public List<E> next()
      Generate next permutation (algorithm from Rosen p. 284)
      Specified by:
      next in interface Iterator<E>
      Returns:
      the items permuted
    • remove

      public void remove()
      Specified by:
      remove in interface Iterator<E>