Открыть сервисСервис

Случайное число и псевдослучайность

Случайное число (от англ. random — «произвольный, случайный») — число, выбранное или сгенерированное таким образом, что каждый элемент из допустимого набора имеет равную вероятность появления. Понятие «рандом» (калька с англ. random) широко используется в информатике, математике, статистике и повседневной речи для обозначения процесса выбора без видимой закономерности.

Математическое понятие

В теории вероятностей случайная величина — это величина, значение которой определяется исходом случайного эксперимента. Набор всех возможных исходов образует пространство элементарных событий, а вероятность каждого исхода задаётся распределением. Наиболее известное распределение — равномерное, при котором каждое значение из промежутка [a, b] имеет одинаковую вероятность.

Случайные числа находят применение в методе Монте-Карло — классе вычислительных алгоритмов, основанных на многократном случайном переборе. Метод был разработан в 1940-х годах физиками-теоретиками Станиславом Уламом, Джоном фон Нейманом и Николасом Метрополисом в рамках лос-аламосских исследований по ядерным технологиям.

Псевдослучайные числа в вычислительной технике

Абсолютно случайные числа в компьютере получить невозможно: процессор детерминирован и при одинаковых входных данных всегда выдаёт одинаковый результат. Поэтому в программировании используются псевдослучайные числа (ПСЧ) — числа, вычисляемые детерминированным алгоритмом, но обладающие статистическими свойствами, характерными для настоящих случайных последовательностей.

Основные генераторы псевдослучайных чисел:

  • LCG (ликонгруэнтный генератор) — один из старейших алгоритмов: Xₙ₊₁ = (a·Xₙ + c) mod m. Использовался в ранних версиях языка C и стандартной библиотеке Java.
  • Mersenne Twister — алгоритм 1997 года, разработанный Макото Матсумото и Цуёси Нисимурой. Генерирует последовательность длиной 2¹⁹⁹³⁷ − 1. Де-факто стандарт в большинстве языков программирования (Python, PHP, Ruby, R).
  • xorshift — семейство быстрых генераторов, предложенных Джорджем Марсалиа в 2003 году.
  • PCG — более новые генераторы, сочетающие простоту линейных конгруэнций с улучшенной случайностью.

ПСЧ инициализируется seed («зерном») — начальным значением. Один и тот же seed всегда даёт одну и ту же последовательность, что позволяет воспроизводить «случайные» события в играх и симуляциях.

Настоящая случайность

Для задач, требующих криптостойкости (генерация ключей, токенов, паролей), ПСЧ недостаточно: при известном seed вся последовательность восстанавливается. В операционных системах существуют устройства энтропии, собирающие шум из недетерминированных источников:

  • время нажатия клавиш и движения мыши;
  • шум дискового ввода-вывода;
  • прерывания от аппаратуры.

В Linux это /dev/random и /dev/urandom, в Windows — криптографический провайдер (CryptGenRandom, в современных версиях — BCryptGenRandom). Криптографические генераторы, такие как HMAC-DRBG, детерминированно расширяют небольшой объём аппаратной энтропии в длинные последовательности.

Применение

Случайные числа используются повсеместно:

  • Криптография — генерация ключей, одноразовых паролей, nonce.
  • Игры и генеративное искусство — процедурная генерация уровней, случайные события, дроп предметов.
  • Статистика и машинное обучение — разделение выборки на обучающую и тестовую, инициализация весов нейросетей, стохастический градиентный спуск.
  • Научные симуляции — метод Монте-Карло в физике, финансах, биологии.
  • Разрешение конфликтов — выбор победителя в лотерее, распределение очередей.

Случайность в философии и естествознании

Понятие случайности выходит за рамки информатики. В классической физике Ньютона считалось, что при точном знании начальных условий будущее полностью предсказуемо (детерминизм Лапласа). Квантовая механика ввела объективную случайность: результат измерения квантовой системы принципиально непредсказуем. Квантовые генераторы случайных чисел (например, использующие деление фотона) дают истинно случайные последовательности, проверяемые на отсутствие закономерностей.

История

Понятие случайности сопровождает человечество с древности — жребий, кости, астрология. Математическое изучение началось с работ Блеза Паскаля и Пьера де Ферма в XVII веке, заложивших теорию вероятностей. В XX веке случайность стала инженерной задачей: от атомных проектов, где возникла потребность в больших объёмах случайных чисел, до современных криптографических систем.

Источники

  • Кнут Д. «Искусство программирования», том 2: «Псевдослучайные числа»
  • Фелленц В. «Введение в криптографию»
  • Марсалиа Дж. «Xorshift RNGs», Journal of Statistical Software, 2003
  • Матсумото М., Нисимура Т. «Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator», ACM TOMACS, 1998
  • Николас Метрополис, Станислав Улам. «The Monte Carlo Method», Journal of the American Statistical Association, 1949
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru