Честная монетка из нечестной
Есть монетка с неизвестной вероятностью орла p, 0 < p < 1. Как получить честный случайный бит 0/1, используя броски этой нечестной монетки?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Бросаем монетку парами. HT и TH имеют одинаковую вероятность p(1-p), поэтому HT можно вернуть как 0, TH как 1, а HH и TT отбрасывать и повторять.
Полный разбор
Один бросок нечестной монетки не подходит: вероятность орла p неизвестна и не равна 1/2. Но две разные пары симметричны:
Эти вероятности равны при любом p. Поэтому алгоритм фон Неймана:
- Бросить монетку два раза.
- Если выпало HT, вернуть 0.
- Если выпало TH, вернуть 1.
- Если выпало HH или TT, отбросить пару и повторить.
Так результат 0 и 1 получается с одинаковой вероятностью. Условие 0 < p < 1 нужно, чтобы разные пары имели ненулевую вероятность и процедура могла завершиться.
Теория
Это Von Neumann extractor: он извлекает unbiased bit из biased independent coin flips за счет симметрии двух разных исходов.
Типичные ошибки
- Пытаться корректировать p напрямую, хотя p неизвестна.
- Использовать один бросок.
- Не отбрасывать одинаковые пары HH и TT.
Как отвечать на собеседовании
- Сразу сравни вероятности HT и TH.
- Проговори, что одинаковые пары не дают честного выбора и поэтому повторяются.