"Информатика (в 2-х частях)", Горячев А.В., Островский С.Л., Паволоцкий А.В., Семёнов А.А., Чернышёва Т.Л., Широков Д.В.
Случайные числа помогают программе моделировать выборы и события, результат которых заранее неизвестен: например, бросок кубика или выбор участника. Обычно их создаёт генератор — алгоритм, который выдаёт последовательность псевдослучайных чисел. Она выглядит непредсказуемой, но при одинаковом начальном состоянии повторяется. Чтобы результат подходил задаче, нужно точно задать допустимые значения и понять, каковы шансы каждого из них.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Случайное число — число, появление которого заранее нельзя точно предсказать, хотя известны возможные значения и вероятности их появления. Например, при броске кубика возможны числа от 1 до 6, но заранее неизвестно, какое выпадет. Это понятие нужно, чтобы описывать выбор, для которого нет заранее известного результата.
Генератор случайных чисел — средство программы, которое выдаёт последовательность чисел для моделирования случайных выборов. Программа получает очередное значение и использует его, например, чтобы определить результат виртуального броска. Генератор позволяет повторять подобные действия без ручного выбора каждого результата.
Псевдослучайные числа — числа, получаемые детерминированным алгоритмом, то есть алгоритмом с однозначными правилами: при одинаковых начальных условиях последовательность повторяется, хотя выглядит случайной. Это удобно для компьютерных задач, потому что такой выбор легко выполнять автоматически. Повторяемость также помогает снова получить тот же ход моделирования.
Равномерное распределение — способ выбора, при котором все значения из заданного набора имеют одинаковую вероятность. Если генератор равномерно выбирает число от 1 до 6, шансы каждого числа равны. Такое условие нужно проверять, когда результатам нельзя отдавать предпочтение.
Обычная программа выполняет заданные команды, поэтому вычисления сами по себе не дают настоящей непредсказуемости: при одних и тех же входных данных программа обычно приходит к одному результату. Для задач, где нужно смоделировать случайный выбор, используют генератор, который выдаёт подходящие значения. Это позволяет компьютеру проводить игровые или статистические эксперименты без того, чтобы человек выбирал каждый результат вручную. В некоторых системах для непредсказуемости используют внешние источники, но в обычных учебных задачах достаточно псевдослучайного генератора.
Генератор последовательно вычисляет значения по своему алгоритму и хранит состояние, от которого зависит следующее число. Начальное состояние называют начальным значением, или зерном генератора. Если задать то же зерно и запустить тот же алгоритм, он пройдёт те же шаги и выдаст ту же последовательность. Это не признак поломки: повторяемость полезна, например, чтобы проверить и воспроизвести результат эксперимента.
Чтобы получить целый номер из ограниченного диапазона, сначала перечисляют все подходящие значения и указывают границы. Например, числа от 1 до 6 — это шесть результатов, а не диапазон из шести шагов, начинающийся с нуля. У разных команд генерации верхняя граница может включаться или не включаться, поэтому нужно прочитать, что именно команда считает допустимым. Если граница исключена, результат можно преобразовать или выбрать другую команду так, чтобы ни один нужный номер не потерялся.
Равномерный выбор означает равные шансы, а не заранее установленный порядок результатов. Если для кубика вероятность каждого числа равна, генератор не обязан выдавать 1, 2, 3, 4, 5, 6 по очереди. Несколько одинаковых результатов подряд тоже допустимы: каждый новый выбор не должен «компенсировать» предыдущий. При большом числе повторений частоты часто становятся ближе, но равенство не гарантировано.
Случайное число удобно связать с событием через соответствие между значениями генератора и результатами. Для кубика каждому числу от 1 до 6 соответствует грань, а для выбора участника каждому номеру — один человек. Так можно моделировать и другие события: сначала задать возможные исходы и их вероятности, затем организовать выбор. Если вероятности не одинаковы, простого равномерного выбора может быть недостаточно: значениям нужно сопоставить исходы с учётом их шансов.
| Понятие или действие | Что означает | Что важно учитывать |
|---|---|---|
| Случайное число | Результат, который заранее нельзя точно предсказать | Нужно знать возможные значения и вероятности |
| Генератор случайных чисел | Программное средство, выдающее числа для моделирования выбора | Обычно выдаёт значения по алгоритму |
| Псевдослучайная последовательность | Выглядит случайной, но строится детерминированно | При одинаковом начальном состоянии может повториться |
| Равномерный выбор из набора | Каждое значение имеет одинаковую вероятность | Равные шансы не гарантируют равного числа результатов |
| Получение целого числа в заданном диапазоне | Выбор одного из допустимых целых чисел | Проверьте, включены ли границы диапазона |
Сначала найдите в таблице понятие или действие, которое соответствует вашей задаче, а затем сверьте ограничения в последнем столбце. Особенно внимательно проверяйте границы и различайте равные вероятности и равные частоты. Это помогает понять, правильно ли задан выбор ещё до запуска программы.
У кубика шесть граней, поэтому результат должен быть одним из шести целых чисел. Если диапазон задать неверно, какая-то грань окажется недоступной или появится лишний результат. Нужно выбрать способ генерации, который включает обе требуемые границы.
Ответ: нужно получить одно равномерно выбранное целое число от 1 до 6 включительно. Например, результат 4 означает, что в модели выпала грань с четырьмя точками. Генератор не обязан выдавать все шесть чисел по очереди.
Для выбора удобно использовать номера вместо имён: так каждому результату генератора можно сопоставить одного участника. Чтобы выбор был честным, все участники должны иметь одинаковые шансы. Поэтому нельзя пропускать номер 1 или 20 и нельзя присваивать двум участникам один номер.
Ответ: генерируем одно целое число от 1 до 20 и выбираем участника с этим номером. Всего допустимо ровно двадцать результатов, поэтому каждому соответствует один участник. Если команда исключает верхнюю границу, нужно изменить способ генерации, иначе участник номер 20 не сможет быть выбран.
Один бросок монеты имеет два исхода, и при равномерной модели каждый из них выбирается с вероятностью ½. Чтобы получить серию, нужно повторить выбор много раз и вести отдельные счётчики для сторон. Даже когда шансы равны, счётчики после тысячи бросков необязательно покажут ровно по 500.
Ответ: результатом моделирования будут две частоты, сумма которых равна 1000. Например, может получиться 512 выпадений одной стороны и 488 другой. Такая разница сама по себе не означает, что программа ошиблась или монета в модели нечестная.
Путают количество возможных значений с верхней границей: диапазон от 1 до 6 содержит шесть чисел, а не семь. Такую ошибку допускают, когда считают только разницу между границами и забывают включить начальное значение. Проверьте себя, перечислив все результаты: их должно быть ровно шесть.
Не проверяют, включена ли верхняя граница в команду генерации. Если команда выдаёт значения от 1 до 6, не включая 6, последняя грань кубика никогда не выпадет. Это легко не заметить, потому что программа всё ещё выдаёт правдоподобные числа. Сверьте правило работы команды и отдельно убедитесь, что крайнее значение действительно возможно.
Ожидают, что результаты будут чередоваться или распределятся поровну в короткой серии. Такое ожидание появляется из-за путаницы между вероятностью каждого исхода и числом уже полученных исходов. Равные шансы действуют при каждом выборе, но не задают порядок результатов. Для проверки смоделируйте серию и помните, что неравные частоты не доказывают ошибку.
Считают повторение последовательности при одинаковых начальных условиях неисправностью генератора. Причина ошибки — ожидание, что случайность обязательно означает неповторяемость при любых обстоятельствах. Псевдослучайный алгоритм закономерно воспроизводит прежние значения, если начальное состояние то же. Проверьте, совпадают ли условия запуска: если да, повтор результата ожидаем.
Для работы со случайными числами нужно уметь задавать целые числа и диапазоны значений. Важно различать множество возможных результатов и его границы, а также понимать, входят ли границы в диапазон. Ещё пригодятся повторяющиеся действия в алгоритме: с их помощью моделируют серию бросков и подсчитывают результаты.
Случайные числа применяют в компьютерном моделировании, играх и статистических экспериментах. В игре генератор может выбирать случайное событие, а в модели — изображать повторение реального процесса. Подсчёт полученных результатов помогает сравнить наблюдения с ожидаемыми вероятностями.
Почему числа генератора называют псевдослучайными?
Обычный вычислительный генератор действует по алгоритму, то есть каждое следующее число зависит от предыдущих и начального состояния. Поэтому последовательность можно повторить, хотя внешне она похожа на случайную.
Может ли случайная последовательность повториться?
Да. Псевдослучайная последовательность повторится, если генератор запустить с тем же начальным состоянием. В случайных экспериментах также могут повторяться отдельные результаты — например, несколько раз подряд может выпасть одна сторона монеты.
Как получить случайное целое число в заданном диапазоне?
Нужно задать все допустимые целые значения и проверить, какие границы включает команда генератора. Например, для чисел от 1 до 6 должны быть доступны ровно шесть значений, включая и 1, и 6.
Почему в серии бросков кубика одно число может выпасть чаще другого?
У каждого числа одинаковая вероятность при каждом броске, но это не заставляет результаты в короткой серии распределяться поровну. Чем больше бросков, тем чаще частоты оказываются близки, но точное равенство не гарантируется.
Где в программе применяют случайные числа?
С их помощью моделируют броски костей и монет, выбирают участников или случайные события в компьютерных играх. Они также нужны в компьютерных моделях и статистических экспериментах.
§ 10. Случайные числа