Эта программа не остановится, если:
- Выбрано случайное число, которое находится в наборе результатов
- Это число генерирует цикл (то есть цикл) в случайном числеалгоритм генератора (все они делают)
- Все числа в цикле уже находятся в наборе результатов
Все генераторы случайных чисел в конечном итоге возвращаются обратно в себя, из-за ограниченного числа целых чиселвозможный ==> для 32-разрядных, только 2 ^ 32 возможных значений.
«Хорошие» генераторы имеют очень большие циклы.«Плохие» алгоритмы дают короткие циклы для определенных значений.Проконсультируйтесь с Кнутом Искусство компьютерного программирования для генераторов случайных чисел.Это увлекательное чтение.
Теперь предположим, что существует цикл из (n) чисел.Для вашей программы, которая повторяется 300 раз, это означает, что (n) <= 300. Кроме того, число попыток, которые вы пытаетесь выполнить, прежде чем нажмете число в этом цикле, плюс продолжительность цикла, не должно превышать 300.Поэтому, если сначала попытаться нажать на цикл, то цикл может длиться 300.Если со второй попытки вы попадаете в цикл, он может длиться всего 299. </p>
Если предположить, что большинство алгоритмов генерации случайных чисел имеют достаточно равномерное распределение вероятностей, вероятность попадания в 300-цикл в первый раз равна (300/2 ^ 32), умноженное на вероятность наличия 300-тактного цикла (это зависит от алгоритма ранда), плюс вероятность попадания в 299-тактный цикл в первый раз (299/2 ^ 32) x вероятность наличия299-цикл и т. Д. И т. Д. И т. П.Затем сложите вторую попытку, третью попытку, вплоть до 300-й попытки (которая может быть только 1-циклом).
Теперь это предполагает, что любое число может взять на себя все 2^ 32 пространства генератора.Если вы ограничиваете его только до 100000, то, по сути, вы увеличиваете вероятность иметь более короткие циклы, потому что несколько чисел (в пространстве 2 ^ 32) могут отображаться на одно и то же число в «реальном» пространстве 100000.
В действительности, большинство алгоритмов генератора случайных чисел имеют минимальную длину цикла> 300. Реализация генератора случайных чисел, основанная на простейшем LCG (линейный конгруэнтный генератор, wikipedia ), может иметь "полныйпериод »(т.е. 2 ^ 32) с правильным выбором параметров.Поэтому можно с уверенностью сказать, что минимальная длина цикла определенно> 300. Если это так, то от алгоритма отображения генератора зависит преобразование 2 ^ 32 чисел в 100000 чисел.Хорошие картостроители не будут создавать 300-циклов, плохие картографы могут создавать короткие циклы.