25package umontreal.ssj.rng;
27import java.util.Collections;
29import java.util.ListIterator;
30import java.util.RandomAccess;
38 private static final int SHUFFLE_THRESHOLD = 5;
49 public static void init(
byte[] array,
int n) {
50 for (
byte k = 1; k <= n; k++)
61 public static void init(
short[] array,
int n) {
62 for (
short k = 1; k <= n; k++)
73 public static void init(
int[] array,
int n) {
74 for (
int k = 1; k <= n; k++)
85 public static void init(
long[] array,
int n) {
86 for (
int k = 1; k <= n; k++)
97 public static void init(
float[] array,
int n) {
98 for (
int k = 1; k <= n; k++)
109 public static void init(
double[] array,
int n) {
110 for (
int k = 1; k <= n; k++)
121 @SuppressWarnings(
"unchecked")
124 final int size = list.size();
125 if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
126 for (
int i = size; i > 1; i--)
127 Collections.swap(list, i - 1, stream.nextInt(0, i - 1));
130 final Object arr[] = list.toArray();
136 final ListIterator it = list.listIterator();
137 for (Object element : arr) {
152 final int size = array.length;
153 for (
int i = size - 1; i > 0; i--) {
154 final int j = stream.
nextInt(0, i);
155 final Object tmp = array[i];
169 final int size = array.length;
170 for (
int i = size - 1; i > 0; i--) {
171 final int j = stream.
nextInt(0, i);
172 final byte tmp = array[i];
185 final int size = array.length;
186 for (
int i = size - 1; i > 0; i--) {
187 final int j = stream.
nextInt(0, i);
188 final short tmp = array[i];
201 final int size = array.length;
202 for (
int i = size - 1; i > 0; i--) {
203 final int j = stream.
nextInt(0, i);
204 final int tmp = array[i];
217 final int size = array.length;
218 for (
int i = size - 1; i > 0; i--) {
219 final int j = stream.
nextInt(0, i);
220 final long tmp = array[i];
233 final int size = array.length;
234 for (
int i = size - 1; i > 0; i--) {
235 final int j = stream.
nextInt(0, i);
236 final char tmp = array[i];
249 final int size = array.length;
250 for (
int i = size - 1; i > 0; i--) {
251 final int j = stream.
nextInt(0, i);
252 final boolean tmp = array[i];
265 final int size = array.length;
266 for (
int i = size - 1; i > 0; i--) {
267 final int j = stream.
nextInt(0, i);
268 final float tmp = array[i];
282 final int size = array.length;
283 for (
int i = size - 1; i > 0; i--) {
284 final int j = stream.
nextInt(0, i);
285 final double tmp = array[i];
303 @SuppressWarnings(
"unchecked")
308 final int size = list.size();
309 if (k < 0 || k > size)
310 throw new IllegalArgumentException(
"k must be 0 <= k <= list.size()");
313 if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
314 for (
int i = 0; i < k; i++) {
316 int j = stream.nextInt(i, size - 1);
317 Collections.swap(list, i, j);
321 final Object arr[] = list.toArray();
327 final ListIterator it = list.listIterator();
328 for (Object element : arr) {
354 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
355 for (
int i = 0; i < k; i++) {
357 int j = stream.
nextInt(i, n - 1);
358 Object temp = array[j];
375 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
376 for (
int i = 0; i < k; i++) {
378 int j = stream.
nextInt(i, n - 1);
379 byte temp = array[j];
396 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
397 for (
int i = 0; i < k; i++) {
399 int j = stream.
nextInt(i, n - 1);
400 short temp = array[j];
417 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
418 for (
int i = 0; i < k; i++) {
420 int j = stream.
nextInt(i, n - 1);
438 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
439 for (
int i = 0; i < k; i++) {
441 int j = stream.
nextInt(i, n - 1);
442 long temp = array[j];
459 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
460 for (
int i = 0; i < k; i++) {
462 int j = stream.
nextInt(i, n - 1);
463 char temp = array[j];
480 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
481 for (
int i = 0; i < k; i++) {
483 int j = stream.
nextInt(i, n - 1);
484 boolean temp = array[j];
501 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
502 for (
int i = 0; i < k; i++) {
504 int j = stream.
nextInt(i, n - 1);
505 float temp = array[j];
522 throw new IllegalArgumentException(
"k must be 0 <= k <= n");
523 for (
int i = 0; i < k; i++) {
525 int j = stream.
nextInt(i, n - 1);
526 double temp = array[j];
Provides methods to randomly shuffle arrays or lists using a random stream.
static void init(int[] array, int n)
Similar to init(byte[], int).
static void init(double[] array, int n)
Similar to init(byte[], int).
static void init(short[] array, int n)
Similar to init(byte[], int).
static void shuffle(long[] array, RandomStream stream)
Similar to shuffle(byte[], RandomStream).
static void shuffle(byte[] array, RandomStream stream)
Randomly permutes array using stream.
static void shuffle(Object[] array, int n, int k, RandomStream stream)
Partially permutes array as follows using stream: draws the new.
static void shuffle(int[] array, RandomStream stream)
Similar to shuffle(byte[], RandomStream).
static void shuffle(short[] array, RandomStream stream)
Similar to shuffle(byte[], RandomStream).
static void shuffle(int[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
static void init(byte[] array, int n)
Initializes array with the first positive integers in natural order as array , for .
static void init(long[] array, int n)
Similar to init(byte[], int).
static void shuffle(boolean[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
static void shuffle(List<?> list, RandomStream stream)
Same as java.util.Collections.shuffle(List<?
static void shuffle(byte[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
static void shuffle(boolean[] array, RandomStream stream)
Similar to shuffle(byte[], RandomStream).
static void shuffle(float[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
static void init(float[] array, int n)
Similar to init(byte[], int).
static void shuffle(Object[] array, RandomStream stream)
Randomly permutes array using stream.
static void shuffle(short[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
static void shuffle(char[] array, RandomStream stream)
Similar to shuffle(byte[], RandomStream).
static void shuffle(double[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
static void shuffle(float[] array, RandomStream stream)
Similar to shuffle(byte[], RandomStream).
static void shuffle(char[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
static void shuffle(double[] array, RandomStream stream)
Similar to shuffle(byte[], RandomStream).
static void shuffle(long[] array, int n, int k, RandomStream stream)
Similar to shuffle(Object[], n, k, RandomStream).
This interface defines the basic structures to handle multiple streams of uniform (pseudo)random numb...
int nextInt(int i, int j)
Returns a (pseudo)random number from the discrete uniform distribution over the integers ,...