Генератор случайных чисел Scala не генерирует уникальные случайные числа в диапазоне - PullRequest
2 голосов
/ 06 мая 2019

У меня есть следующий код для генерации новых случайных чисел

val start = 1
val end = 50000000
val rnd = new scala.util.Random

for (i < 1 to 25000000){
  val rnum = start + rnd.nextInt((end - start) + 1)

...
}

Но это время от времени производит повторяющиеся случайные числа.Это ошибка или я сделал что-то глупое?

Ответы [ 2 ]

5 голосов
/ 06 мая 2019

Не волнуйтесь, это не ошибка, и вы не сделали ничего глупого. Однако вы упустили тот факт, что последовательность случайных чисел может содержать дубликаты .

Причины объяснены в комментариях.

Проблема в том, что у людей нет хорошего инстинктивного понимания случайных чисел. Если вы попросите людей написать последовательность цифр, они вряд ли будут повторять цифру, хотя это должно происходить в 10% случаев. Если вы попросите людей записать 5 случайных цифр, они вряд ли будут использовать одну и ту же цифру дважды, хотя это должно происходить в 70% случаев.

0 голосов
/ 06 мая 2019

Нет ошибки.Он выбирает случайным образом, так что есть вероятность, что этот элемент будет выбран.Я предпочитаю использовать функцию перемешивания List.

val list = (1 to 100).toList

scala.util.Random.shuffle(list).take(1)

Но создание списка большого числа не будет эффективным решением.Вы можете использовать следующий способ для генерации случайного числа.

val seed = new java.util.Date().hashCode
val rand = new scala.util.Random(seed)
val someNum = rand.nextInt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...