/*
* RandShuffle.java Random access to data. Permutation and shuffle of source data.
* @author Andrew Krizhanovsky /mail: aka at mail.iias.spb.su/
* Created on 19 May 2005
*/
package wikipedia.util_rand;
import java.util.Random;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class RandShuffle {
/** Creates a new instance of RandShuffle */
public RandShuffle() {
}
/*
// return {true, true, ... true} size of n_total
public static boolean[] GetTrueBoolArray (int n_total) {
boolean[] b = new boolean[n_total];
for(int i=0; i<n_total; i++) {
b [i] = true;
}
return b;
}
*/
/** Create and return boolean random array
* @param n_true - number of elements with true value
* @param n_total - total number of boolean elements
*/
public static boolean[] getRandArray (int n_true, int n_total) {
int i;
if(n_total < 1 || n_true > n_total)
return null;
boolean[] b = new boolean[n_total];
for(i=0; i<n_true; i++) {
b [i] = true;
}
// take as input the array b and rearrange elements in random order
for (i=0; i<n_total; i++) {
int r = (int) (Math.random() * (i+1)); // int between 0 and i
boolean swap = b[r];
b[r] = b[i];
b[i] = swap;
}
return b;
}
/** Create and return boolean array with true elements
* @param n_size - size of returned array
*/
/*public static boolean[] getTrueArray (int n_size) {
if(n_size < 1)
return null;
boolean[] b = new boolean[n_size];
for(int i=0; i<n_size; i++) {
b [i] = true;
}
return b;
}*/
/** Select randomly n_limit elements from source
*/
/*public static int[] getRandIntArray(int[] source, int n_limit) {
int i, counter;
if (null == source || 0 == n_limit)
return null;
if (n_limit < 0 || n_limit >= source.length)
return source;
boolean[] b_rand = RandShuffle.getRandBoolArray (n_limit, source.length);
int[] result = new int[n_limit];
counter = 0;
for (i=0; i<b_rand.length; i++) {
if (b_rand[i]) {
result[counter ++] = source[i];
}
}
return result;
}*/
public static int[] permuteRandomly(int[] source) {
int i;
Integer[] objects = new Integer[source.length];
for(i=0; i<source.length; i++) {
objects[i] = source[i];
}
List<Integer> list = Arrays.asList(objects);
Collections.shuffle(list);
for(i=0; i<source.length; i++) {
source[i] = list.get(i);
}
return source;
}
// todo rewrite, use shuffle from:
// file:///mnt/win_e/all/docs/programming/java/tutorial_Nov_10_2006/collections/interfaces/list.html
// file:///mnt/win_e/doc_huge/programming/java/tutorial_Nov_10_2006/collections/interfaces/list.html
/*public static int[] permuteRandomly(int[] source) {
int i, counter;
if (null == source)
return null;
int[] b = new int[source.length];
for (i=0; i<source.length; i++) {
b[i] = source[i];
}
// take as input the array b and rearrange elements in random order
for (i=0; i<source.length; i++) {
int r = (int) (Math.random() * (i+1)); // int between 0 and i
int swap = b[r];
b[r] = b[i];
b[i] = swap;
}
return b;
}*/
}