Введение: самое парадоксальное чудо теории вероятностей
В 2003 году датский информатик Петер Бро Милтерсен сформулировал знаменитую задачу о 100 узниках:
- \(100\) приговоренных к смерти узников имеют номера от \(1\) до \(100\). В комнате стоят \(100\) закрытых коробок, внутри которых случайно разложены карточки с номерами от \(1\) до \(100\) (подстановка \(\sigma \in S_{100}\)).
- Правило: Каждый узник по очереди входит в комнату и может открыть не более \(50\) коробок, чтобы найти свой номер. После его выхода коробки закрываются, и любое общение после начала испытания исключено (но стратегию можно обсудить заранее).
- Условие спасения: Только если все \(100\) узников найдут свои номера, всех помилуют; если хотя бы один потерпит неудачу, казнят всех \(100\).
Если каждый открывает \(50\) случайных коробок (независимая стратегия), шанс одного равен \(1/2\), но вероятность общего спасения ничтожна:
\[\mathbb{P}(\text{все спасены})_{\text{незав.}} = \left(\frac{1}{2}\right)^{100} \approx 7{,}89 \times 10^{-31}\]Однако коллега Милтерсена Свен Скайум нашел стратегию следования по указателям (Pointer-Following Strategy), которая без передачи единого бита информации поднимает шанс общего спасения до \(31{,}18\,\%\)!
Глава 1: Следование по указателям и разложение на независимые циклы
Стратегия Скайума для узника с номером \(k \in \{1, \dots, 100\}\):
- Шаг 1: Сначала открыть коробку № \(k\).
- Шаг 2: Если внутри карточка \(x_1 = k\), успех; если \(x_1 \neq k\), следующей открыть коробку № \(x_1\).
- Шаг 3: Прочитать номер \(x_2\) и открыть коробку № \(x_2\), двигаясь по цепочке \(k \mapsto \sigma(k) \mapsto \sigma^2(k) \mapsto \cdots\), пока не найдется \(k\) или не исчерпаются \(50\) попыток.
flowchart TD
Start["Узник k входит в комнату (макс. 50 попыток)"]
Step1["Шаг 1: Открыть коробку k, прочитать карточку x = σ(k)"]
Check{"Карточка x == k ?"}
Win["Свой номер k найден!"]
Limit{"Открыто коробок < 50 ?"}
Next["По указателю: Открыть коробку x (x ← σ(x))"]
Lose["Не найден за 50 шагов: Общая казнь"]
Start --> Step1 --> Check
Check -- "Да" --> Win
Check -- "Нет" --> Limit
Limit -- "Да" --> Next --> Check
Limit -- "Нет (длина цикла ℓ > 50)" --> Lose
Почему это работает? Соответствие коробка \(\mapsto\) карточка есть биекция \(\sigma\) в симметрической группе \(S_{2n}\) (\(2n=100\)). Любая конечная подстановка единственным образом раскладывается в произведение независимых (непересекающихся) циклов:
\[\sigma = C_1 \circ C_2 \circ \cdots \circ C_m, \qquad \sum_{i=1}^m |C_i| = 2n = 100\]Так как \(\sigma\) биективна, стартуя с коробки \(k\), узник движется по единственному замкнутому циклу, содержащему \(k\), и завершает обход на \(\sigma^{-1}(k)\) (коробке с карточкой \(k\)). Следовательно:
- Узник \(k\) успешен за \(\le 50\) шагов тогда и только тогда, когда длина его цикла \(\ell \le 50\).
- Все \(100\) узников выживают тогда и только тогда, когда подстановка \(\sigma \in S_{100}\) не содержит ни одного цикла длины \(\ell > 50\)!
Глава 2: Подсчет длинных циклов и гармонические числа (\(1 - \ln 2\))
Для \(2n\) узников (\(n = 50\)) подстановка \(\sigma \in S_{2n}\) может содержать не более одного цикла длины \(\ell > n\), так как два непересекающихся цикла длины \(> n\) требовали бы минимум \(2n+2 > 2n\) элементов. Значит, события \(E_\ell := \{\sigma \text{ содержит цикл длины } \ell\}\) при \(\ell = n+1, \dots, 2n\) попарно несовместны! Число подстановок в \(E_\ell\) равно:
- Выбор \(\ell\) элементов длинного цикла: \(\binom{2n}{\ell}\);
- Число ориентированных циклов на этих \(\ell\) элементах: \((\ell - 1)!\);
- Перестановки остальных \(2n - \ell\) элементов: \((2n - \ell)!\).
При перемножении факториалы сокращаются:
\[|E_\ell| = \binom{2n}{\ell} \cdot (\ell - 1)! \cdot (2n - \ell)! = \frac{(2n)!}{\ell! \, (2n - \ell)!} \cdot (\ell - 1)! \, (2n - \ell)! = \frac{(2n)!}{\ell}\]Деление на \(|S_{2n}| = (2n)!\) дает \(\mathbb{P}(E_\ell) = \frac{1}{\ell}\). Через гармонические числа \(H_N = \sum_{k=1}^N \frac{1}{k}\) получаем точную вероятность выживания:
\[\boxed{P_{\text{success}}(2n) = 1 - \sum_{\ell = n+1}^{2n} \frac{1}{\ell} = 1 - \left(H_{2n} - H_n\right) \xrightarrow{n \to \infty} 1 - \int_1^2 \frac{dx}{x} = 1 - \ln 2 \approx 30{,}685\,\%}\]При \(2n = 100\) имеем \(P_{\text{success}}(100) = 1 - (H_{100} - H_{50}) \approx \mathbf{31{,}1828\,\%}\)!
Глава 3: Связывание рисков (Coupling) без передачи информации
flowchart TD
Pool["Суммарный риск фиксирован: Ожидание неудач E[неудач] = 50"]
Indep["Независимая стратегия: Неудачи распылены почти по всем исходам"]
Cycle["Стратегия циклов: Судьбы связаны структурой циклов σ"]
ResI["Минимум 1 провал в 99,99...92 % исходов → Выживание ≈ 7,89×10⁻³¹"]
ResC["Провалы сжаты в 68,82 % исходов (ℓ>50) → В 31,18 % исходов выживают все 100!"]
Pool --> Indep --> ResI
Pool --> Cycle --> ResC
| Характеристика | 1. Независимая стратегия | 2. Стратегия циклов |
|---|---|---|
| Личный успех \(\mathbb{P}(A_k)\) | \(50{,}00\,\%\) | \(50{,}00\,\%\) (одинаково) |
| Ожидание успехов \(\mathbb{E}[X]\) | \(50\) узников | \(50\) узников (одинаково) |
| Корреляция | Нулевая (независимость) | Сильная положительная связь через \(\sigma\) |
| Выживание всех \(100\) | \((1/2)^{100} \approx 7{,}89 \times 10^{-31}\) | \(1 - (H_{100} - H_{50}) \approx 31{,}18\,\%\) |
| Предел при \(n \to \infty\) | \(0\) | \(1 - \ln 2 \approx 30{,}685\,\%\) |
- Связывание (Coupling): Поскольку 1 неудача и 51 неудача одинаково ведут к казни, стратегия циклов концентрирует все неудачи в \(68{,}82\,\%\) перестановок с длинным циклом (\(\ell > 50\)), очищая \(31{,}18\,\%\) пространства элементарных исходов от единой ошибки!
- Защита от коварного начальника тюрьмы: Тайно выбрав заранее случайную биекцию \(\tau \in S_{100}\), узники сопряжением \(\tau \sigma \tau^{-1}\) гарантируют те же \(31{,}18\,\%\) выживания.
