Я пытаюсь перетасовать массив целых чисел, как показано ниже,
и http://en.wikipedia.org/wiki/Fisher-Yates_shuffle,
"Дополнительная проблема возникает, когда случайный случай Фишера-Йейтса используется с псевдослучайнымгенератор чисел или PRNG: поскольку последовательность чисел, выводимых таким генератором, полностью определяется его внутренним состоянием в начале последовательности, тасование, управляемое таким генератором, не может, возможно, привести к более четким перестановкам, чем генератор имеет различные возможные состояния.... "
- Достаточно ли этого, чтобы я заполнил мой генератор SecureRandom большим количеством байтов?
Какой самый простой способ заполнить начальный массив байтов?т.е.
байт [] seed = новый байт [2048];// заполнить начальный байт случайным образом, какой самый простой способ?SecureRandom secureRandom = новый SecureRandom (начальное число);
Код:
/**
* http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
*
* To shuffle an array a of n elements (indices 0..n-1):
* for i from n − 1 downto 1 do
* j ← random integer with 0 ≤ j ≤ i
* exchange a[j] and a[i]
*/
public int[] shuffle (int[] inSet ) {
int [] returnSet = Arrays.copyOf(inSet, inSet.length);
for( int i = inSet.length-1; i > 0; i-- ) {
// j ← random integer with 0 ≤ j ≤ i
int j = secureRandom.nextInt(i+1);
// swap returnSet[i] and returnSet[j]
int temp = returnSet[i];
returnSet[i] = returnSet[j];
returnSet[j] = temp;
}
return returnSet;
}