моя цель состоит в случайном перетасовке массива (от 0 до 9), но каждое число должно появляться в массиве только один раз. У меня есть две (рабочие) идеи, но я хотел бы узнать, сколько раз этот метод random2 повторяется для достижения такого же уровня случайности в массиве, что и в первом методе (random1).
import java.util.Random;
class RandomStuff {
static Random r;
final static int iteraction = 10;
public static void main (String[] args) {
r = new Random();
int[] array = new int[10];
random1(array);
random2(array, iteraction);
}
static void random1(int[] array) {
for(int i = 0; i < array.length; i++) pole[i] = -1;
for(int i = 0; i < array.length; i++) {
while(true) {
int y = r.nextInt(10);
if(!find(array, y)) {
array[i] = y;
break;
}
}
}
}
static void random2(int[] array, int iteraction) {
for(int i = 0; i <= iteraction; i++) {
int y1 = r.nextInt(array.length);
int y2 = r.nextInt(array.length);
int p = array[y1];
array[y1] = array[y2];
array[y2] = p;
}
}
static boolean find(int[] array , int value) {
for(int i = 0; i < array.length; i++) {
if(pole[i] == value) return true;
}
return false;
}
}
Первый метод (random1) работает с назначением случайных чисел и тестированием, если они уже не находятся в массиве. Который кажется для меня довольно случайным.
Второй метод (random2) работает с заменой двух случайных случайных значений в массиве. Поэтому вопрос в том, сколько раз мне приходится менять два числа в массиве, чтобы достичь такого же уровня случайности. (или какое значение имеет переменная iteraction).
Спасибо за любой ответ.
Чтобы ответить на ваш первоначальный вопрос, "сколько раз этот метод random2 повторяется для достижения такого же уровня случайности в массиве, что и в первом методе?"
Ответ таков: он никогда не достигнет такого же уровня случайности.
Для любой позиции, которая была заменена, есть равный шанс, что она прибывает в любую позицию, что означает 10% -ный шанс, что она вернется туда, где она началась.
На каждой итерации 2 числа меняются местами (или ноль, если число заменяется на свою позицию). Это означает, что после 1-й итерации 80% -ый шанс для любой данной позиции никогда не был заменен. После N итераций все еще существует вероятность 0.8 ^ N, что она никогда не менялась местами. Если он был заменен, есть вероятность 10%, что он вернулся туда, где он начался. Таким образом, вероятность того, что любая заданная цифра находится в исходном положении, равна 10% + 0.8 ^ N. Это всегда> 10%, поэтому вы никогда не получите абсолютно равномерного распределения.
Например, для вашего выбора из 10 итераций остается 10,7% шанса на каждую цифру, которую она никогда не двигала, или в общей сложности 19,7% вероятность того, что она будет в исходном положении. Так что десять итераций даже не достаточно близки.
Как насчет назначения случайного числа каждому элементу массива, упорядочить случайные числа в порядке и в этом порядке прочитать элемент массива, назначенный этому случайному числу
0.64342 0
0.95229 1
0.23047 2
0.82793 3
0.19014 4
0.18528 5
0.15684 6
0.99546 7
0.54524 8
0.90612 9
порядок
0.15684 6
0.18528 5
0.19014 4
0.23047 2
0.54524 8
0.64342 0
0.82793 3
0.90612 9
0.95229 1
0.99546 7
числа от 0 до 9 теперь в случайном порядке