groovy.util
Class PermutationGenerator<E>
java.lang.Object
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
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 |
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
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>>