2 * Copyright (C) 2015, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package gov.nasa.jpf.util;
20 import java.util.NoSuchElementException;
23 * a RandomPermutationGenerator that keeps track of previously produced values
24 * to avoid duplicates.
25 * Note this only makes sense for relatively small sample sizes, but then again
26 * that is what RandomPermutationGenerators are used for (to avoid N!)
28 public class UniqueRandomPermGenerator extends RandomPermutationGenerator {
30 protected SortedArrayIntSet visited;
32 public UniqueRandomPermGenerator (int nElements, int nPermutations, int seed){
33 super(nElements, nPermutations, seed);
35 visited = new SortedArrayIntSet();
36 this.nPermutations = Math.min( TotalPermutationGenerator.computeNumberOfPermutations(nElements), nPermutations);
41 visited = new SortedArrayIntSet();
45 while (nGenerated < nPermutations){
46 int[] p = super.next();
47 int h = OATHash.hash(p);
52 nGenerated--; // that one didn't count, we already have seen it
55 throw new NoSuchElementException();