groovy.util
Class PermutationGenerator<E>

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

public class PermutationGenerator<E>
extends java.lang.Object
implements java.util.Iterator<java.util.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 Summary
PermutationGenerator(java.util.Collection<E> items)
          WARNING: Don't make n too large.
 
Method Summary
 java.math.BigInteger getTotal()
           
 boolean hasNext()
           
 java.util.List<E> next()
          Generate next permutation (algorithm from Rosen p. 284)
 void remove()
           
 void reset()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PermutationGenerator

public PermutationGenerator(java.util.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
Method Detail

reset

public void reset()

getTotal

public java.math.BigInteger getTotal()

hasNext

public boolean hasNext()
Specified by:
hasNext in interface java.util.Iterator<java.util.List<E>>

next

public java.util.List<E> next()
Generate next permutation (algorithm from Rosen p. 284)

Specified by:
next in interface java.util.Iterator<java.util.List<E>>
Returns:
the items permuted

remove

public void remove()
Specified by:
remove in interface java.util.Iterator<java.util.List<E>>