Skip to Content

§2. Таблицы случайных чисел: случайность, записанная в общак

Раз уж физический датчик не повторишь и к компьютеру не прикрутишь — напрашивается ход: прогнать датчик один раз, а результат записать. Получится таблица случайных чисел — зафиксированные выходы какого-то честного датчика. Обычно это длинная последовательность псевдослучайных цифр (0,1,…,90, 1, \dots, 9), разбитая на группы для удобства. Записал один раз в тетрадку — и пользуйся сколько влезет, всегда та же самая.

Как сколотить свою таблицу

Таблицу может намотать кто угодно, инструмент — любой честный жребий:

  • Шляпа с бумажками. Накидай в шапку десять бумажек с цифрами от 00 до 99, тяни наугад (и возвращай обратно). Какая цифра выпала — такую и записал.
  • Икосаэдр. Это кубик на 2020 граней (знаешь, такой у настольщиков). Наносим каждую цифру 0–90\text{–}9 по два раза (на 2 из 20 граней) — и катаем. Двадцать граней, каждая цифра честно занимает одну десятую, блата нет.

По-дворовому: это как общак случайности — один раз честно скинулись цифрами, записали в тетрадь, и дальше весь район берёт оттуда, не перекатывая кубик заново.

Как добыть из таблицы число

Таблица — это просто сетка цифр. Чтобы получить число y∈[0,1)y \in [0,1), делаем так:

  1. Ткни наугад стартовую клетку — загадай строку и столбец, не глядя (чтобы и выбор места был случайным).
  2. Считанные цифры — это знаки после запятой. Например, попал в цифры 00 и 99 — получил y1=0,09y_1 = 0{,}09.
  3. Дальше идёшь по столбцу вниз (или по строке — как договорился заранее, лишь бы порядок не зависел от самих цифр) и снимаешь следующие числа: y2=0,54y_2 = 0{,}54, y3=0,42y_3 = 0{,}42, y4=0,01y_4 = 0{,}01, и так далее.

Нужна точность побольше? Бери цифры парами из соседних столбцов — получишь по четыре знака: y1=0,0973y_1 = 0{,}0973, y2=0,5420y_2 = 0{,}5420, …

Пощупаем: ниже код сам катает «таблицу» и снимает из неё числа. Жми Run, покрути — числа каждый раз свежие:

Загрузка редактора…

Подвох: таблица может и соврать

Казалось бы — что тут ломаться. Но с таблицами есть две засады.

Первая: таблица может оказаться кривой — датчик, которым её мотали, был так себе, и в цифрах притаилась закономерность. Вторая, тоньше: даже «хорошая» на вид таблица при неаккуратном использовании приводит к неверным выводам (отдельная показательная история ждёт нас в §5 — «эксперимент Неудачи»).

Классический пример — цифры числа π\pi. Казалось бы, что может быть «случайнее»: берём 20 00020\,000 знаков π\pi после запятой и объявляем их таблицей случайных цифр. Но вот незадача: среди первых 10 00010\,000 цифр ноль встречается всего 937937 раз. А должно бы — около тысячи (каждая цифра занимает свою десятую). Насколько это подозрительно? Прикинем по центральной предельной теореме.

Разберём по кирпичикам, откуда берётся «норма» и «разброс»:

  • Каждая из N=10 000N = 10\,000 цифр — это испытание «ноль / не ноль» с шансом p=0,1p = 0{,}1. Схема Бернулли, как в первой главе.
  • Сколько нулей ждём в среднем: Np=10 000⋅0,1=1000N p = 10\,000 \cdot 0{,}1 = 1000.
  • Разброс (стандартное отклонение) по формуле для биномиального: σ=Np(1−p)=10 000⋅0,1⋅0,9=900=30\sigma = \sqrt{N p (1-p)} = \sqrt{10\,000 \cdot 0{,}1 \cdot 0{,}9} = \sqrt{900} = 30.
  • Насколько 937937 далеко от нормы: 937−100030=−2,1\dfrac{937 - 1000}{30} = -2{,}1 — то есть на 2,12{,}1 сигмы ниже среднего.

А по ЦПТ отклонение сильнее двух сигм случается примерно в двух случаях из ста. То есть π\pi в этом месте ведёт себя как довольно редкий, «везучий» (точнее, невезучий на нули) образец — на грани приличия. Пользоваться цифрами π\pi как случайными можно, но с оглядкой. Прогоним это рассуждение на честных случайных цифрах и сравним с π\pi:

Загрузка редактора…

Впиши, насколько (в сигмах) 937 нулей отклоняется от нормы — по формуле выше (округли до одного знака, со знаком минус):

Проверка

Чему равно 937−1000σ\dfrac{937 - 1000}{\sigma}?

Почему таблицы тоже не выход

Таблица воспроизводима (та же тетрадь — те же числа) и честна, если датчик был хорош. Но для компьютера у неё свой минус: чтобы разыграть серьёзную симуляцию, нужны многие тысячи и миллионы чисел, а таблицу такого размера надо где-то хранить — она сожрёт уйму памяти. Таскать с собой гигантскую тетрадь неудобно.

Поэтому на практике чаще берут математические датчики — короткие алгоритмы, которые рождают псевдослучайные числа прямо на лету, без всякой тетради. Как они устроены, где их сила и где знаменитый провал — в следующем параграфе.

Обновлено