Skip to Content

§3. Показательный датчик без логарифмов: фокус фон Неймана

Формула из §1 x=−ln⁡(1−y)x = -\ln(1-y) хороша всем, кроме одного: в ней логарифм, а компьютер считает его не бесплатно. Фон Нейман придумал, как получить показательный закон вообще без логарифмов — одними сравнениями чисел. Звучит как развод, но работает железно.

Таблица и нисходящие серии

Представь таблицу независимых равномерных на [0,1][0,1] чисел, читаем её по строкам:

η11,η12,η13,…η21,η22,η23,……………\begin{array}{cccc} \eta_{11}, & \eta_{12}, & \eta_{13}, & \dots \\ \eta_{21}, & \eta_{22}, & \eta_{23}, & \dots \\ \dots & \dots & \dots & \dots \end{array}

В каждой строке смотрим, как долго числа идут на убыль с самого начала. Номер числа, которое первым оказалось больше предыдущего и оборвало спад, обозначим KiK_i:

Ki=min⁡{ j≥2:ηi1>ηi2>⋯>ηi(j−1)<ηij }.K_i = \min\{\, j \ge 2 : \eta_{i1} > \eta_{i2} > \dots > \eta_{i(j-1)} < \eta_{ij} \,\}.

Это ровно «нисходящая серия» из задачи 2 главы 2, где мы получили MK=e\mathbf{M}K = e. Теперь назовём строку успехом, если KiK_i чётное, и неудачей, если нечётное.

Рецепт

Утверждение 2. Пусть ν\nu — число неудач до первого успеха. Тогда величина ν+η(ν+1)1\nu + \eta_{(\nu+1)1} — число неудачных строк плюс первое число успешной строки — распределена по показательному закону с параметром λ=1\lambda = 1.

То есть алгоритм совсем детский:

  1. Тянешь строку: первое число запоминаешь, дальше тянешь числа, пока они убывают.
  2. Спад оборвался на чётном номере — успех: ответ равен «сколько было неудач» плюс «первое число этой строки».
  3. Оборвался на нечётном — неудача: счётчик неудач +1, тянешь новую строку.

Ни одного логарифма, только сравнения «больше-меньше». Целую часть ответа даёт счётчик неудач, дробную — первое число строки.

Почему это работает

Разберём по кирпичикам. Сначала поймём, с какой вероятностью серия держится долго и при этом первое число не больше yy:

P(K1>n, η11≤y)=P(y≥η11>η12>⋯>η1n)=ynn!.\mathbf{P}(K_1 > n,\ \eta_{11} \le y) = \mathbf{P}(y \ge \eta_{11} > \eta_{12} > \dots > \eta_{1n}) = \frac{y^n}{n!}.

Почему так: все nn чисел должны попасть на отрезок [0,y][0, y] (шанс yny^n) и встать строго по убыванию — а из n!n! равновероятных порядков нужный ровно один. Отсюда вероятность, что серия оборвалась ровно на nn-м числе:

P(K1=n, η11≤y)=yn−1(n−1)!−ynn!.\mathbf{P}(K_1 = n,\ \eta_{11} \le y) = \frac{y^{n-1}}{(n-1)!} - \frac{y^n}{n!}.

Складываем по чётным n=2,4,6,…n = 2, 4, 6, \dots — получается знакопеременный ряд, который сворачивается в знакомую экспоненту:

P(K1 чётно, η11≤y)=y1!−y22!+y33!−y44!+⋯=1−e−y.\mathbf{P}(K_1 \text{ чётно},\ \eta_{11} \le y) = \frac{y}{1!} - \frac{y^2}{2!} + \frac{y^3}{3!} - \frac{y^4}{4!} + \dots = 1 - e^{-y}.

При y=1y = 1 это вероятность успеха: p=1−e−1≈0,632p = 1 - e^{-1} \approx 0{,}632, а неудачи — q=e−1≈0,368q = e^{-1} \approx 0{,}368. Строки независимы, поэтому

P(ν=i, η(ν+1)1≤y)=qi (1−e−y).\mathbf{P}(\nu = i,\ \eta_{(\nu+1)1} \le y) = q^i\,(1 - e^{-y}).

А теперь финальный аккорд — свойство самого показательного закона. Возьмём τ∼Exp(1)\tau \sim \text{Exp}(1) и разрежем на целую часть [τ][\tau] и дробную {τ}\{\tau\}. Оказывается (это утверждение 3, его проверим в задачах), они независимы: целая часть распределена геометрически, P([τ]=i)=qip\mathbf{P}([\tau] = i) = q^i p, а дробная имеет функцию распределения 1p(1−e−x)\frac1p(1 - e^{-x}) на [0,1][0,1]. Значит

P([τ]=i, {τ}≤y)=qi (1−e−y)\mathbf{P}([\tau] = i,\ \{\tau\} \le y) = q^i\,(1 - e^{-y})

— ровно то же, что у нашей пары «число неудач» и «первое число успешной строки». Совпали законы целой и дробной частей, значит совпали и суммы: ν+η(ν+1)1\nu + \eta_{(\nu+1)1} распределено как τ\tau. Вот и весь фокус.

По-дворовому: счётчик неудач — это «сколько целых часов прождал», а первое число удачной строки — «сколько ещё минут сверху». Склеил — получил честное время ожидания по показательному закону.

Покрути виджет: гистограмма датчика ложится на e−xe^{-x}, а счётчик внизу показывает, что логарифмов ноль, а равномерных уходит около 4,34{,}3 на каждое число.

Датчик фон Неймана: показательный закон без логарифмов

Гистограмма чисел из датчика фон Неймана против плотности e⁻ˣ. Среднее: 0.996 (теория 1).Логарифмов потрачено: 0. Равномерных чисел на одно показательное: 4.30 (теория ≈ 4,30).

Откуда 4,34{,}3: в строке в среднем MK=e≈2,72\mathbf{M}K = e \approx 2{,}72 числа, а строк на один успех уходит в среднем 1/p≈1,581/p \approx 1{,}58. Перемножаем: 2,72⋅1,58≈4,302{,}72 \cdot 1{,}58 \approx 4{,}30.

Код датчика целиком:

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

Цена фокуса — чисел тратится больше (около 4,3 вместо одного у обратной функции). Выгоден он там, где логарифм дорог, а равномерные числа дешёвые. В следующем параграфе — другой подход: логарифм оставить, но считать его один раз на целую пачку чисел.

Проверь себя

Тест

В датчике фон Неймана из чего складывается ответ?
Обновлено