سیدامیرحسین رسولی Ответов: 1

Создайте несколько случайных чисел без повтора


Привет, ребята, я хочу создать несколько случайных чисел. Мои цифры таковы 0,1,2 и 3.
Я хочу вернуться только один номер и это очень важно.
Если вы можете помочь мне разделить его (моя функция перемешивания) или другим способом решить мою проблему, например, просто распечатать 1 или 2 Спасибо :)

Что я уже пробовал:

Прежде чем задать этот вопрос, я проверяю эту функцию, но возвращаю более одной.
function shuffle(a) {
    var j, x, i;
    for (i = a.length - 1; i > 0; i--) {
        j = Math.floor(Math.random() * (i + 1));
        x = a[i];
        a[i] = a[j];
        a[j] = x;
    }
}

Bryian Tan

как функция shuffle является ссылкой?

1 Ответов

Рейтинг:
2

OriginalGriff

"Неповторяющиеся" и "случайные" числа не тривиальны: сама природа случайности делает повторение не только допустимым, но и столь же вероятным, как и неповторение. А по мере увеличения числа генерируемых значений вероятность случайного повторения возрастает

Есть два способа сделать это:
1) недетерминированный. Сгенерируйте свою случайную величину, посмотрите, есть ли она в наборе чисел, которые вы уже сделали, выбросьте ее, если она есть, и получите другую.
2) детерминизм. Соберите все возможные случайные числа, прежде чем начать генерировать последовательность. Для каждого числа в последовательности сгенерируйте случайное число, которое находится между 0 и числом значений, оставшихся в последовательности. Используйте это как индекс, чтобы получить случайное значение. Удалите случайное число из последовательности и уменьшите длину на единицу.

1) простой код, но может занять чрезвычайно много времени для генерации чисел, особенно когда число генерируемых случайных чисел превышает половину диапазона значений (то есть вы сгенерировали 50 из 100 чисел), так как шансы на повторение становятся выше 1:2 и продолжают расти).
2) сложнее кодировать, но всегда требуется одинаковое время для генерации значения.