You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2013/08/09 15:55:49 UTC
svn commit: r1512306 - in
/commons/proper/math/trunk/src/main/java/org/apache/commons/math3:
random/RandomDataGenerator.java util/MathArrays.java
Author: erans
Date: Fri Aug 9 13:55:49 2013
New Revision: 1512306
URL: http://svn.apache.org/r1512306
Log:
MATH-1020.
Fixed "nextPermutation" in "RandomDataGenerator". Bug showed up when using
a fixed version of "shuffle" (MATH-1019) added in "MathArrays" (MATH-1010).
Added overloaded "shuffle" method (used in the above fix).
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/MathArrays.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java?rev=1512306&r1=1512305&r2=1512306&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/random/RandomDataGenerator.java Fri Aug 9 13:55:49 2013
@@ -46,6 +46,7 @@ import org.apache.commons.math3.exceptio
import org.apache.commons.math3.exception.NumberIsTooLargeException;
import org.apache.commons.math3.exception.OutOfRangeException;
import org.apache.commons.math3.exception.util.LocalizedFormats;
+import org.apache.commons.math3.util.MathArrays;
/**
* Implements the {@link RandomData} interface using a {@link RandomGenerator}
@@ -639,13 +640,10 @@ public class RandomDataGenerator impleme
}
int[] index = getNatural(n);
- shuffle(index, n - k);
- int[] result = new int[k];
- for (int i = 0; i < k; i++) {
- result[i] = index[n - i - 1];
- }
+ MathArrays.shuffle(index, getRandomGenerator());
- return result;
+ // Return a new array containing the first "k" entries of "index".
+ return MathArrays.copyOf(index, k);
}
/**
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/MathArrays.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/MathArrays.java?rev=1512306&r1=1512305&r2=1512306&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/MathArrays.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/MathArrays.java Fri Aug 9 13:55:49 2013
@@ -1505,4 +1505,24 @@ public class MathArrays {
throw new MathInternalError(); // Should never happen.
}
}
+
+ /**
+ * Shuffle the entries of the given array.
+ *
+ * @param list Array whose entries will be shuffled (in-place).
+ * @param rng Random number generator.
+ */
+ public static void shuffle(int[] list,
+ RandomGenerator rng) {
+ shuffle(list, 0, Position.TAIL, rng);
+ }
+
+ /**
+ * Shuffle the entries of the given array.
+ *
+ * @param list Array whose entries will be shuffled (in-place).
+ */
+ public static void shuffle(int[] list) {
+ shuffle(list, new Well19937c());
+ }
}