Каждый раз, когда выпадает сначала орёл, а затем решка, записываем 1, когда сначала решка, а затем орёл - 0.
Да, верно.
Это самое простое, что можно сделать.
Незавсисмо от
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
двойки "01" и "10" выпадают с одинаковой вероятностью
![$p(1-p)$ $p(1-p)$](https://dxdy-04.korotkov.co.uk/f/f/b/d/fbdd25184d1c08b3ee93a64a8d28cb5482.png)
каждая. Если для одной выдать "0", для другой "1", то в этой выходной последовательности они будут равновероятны. При этом двойки "11" и "00" просто выбрасываются - для них никакой выход не генерируется.
Важно: двойки должны быть (1,2), (3,4), (5,6), ..., а не (1,2), (2,3), (3,4),...
Интересно посмотреть какой КПД такого алгоритма - сколько в среднем новых битов он выдаёт на один входной бит.
Здесь, очевидно, это
![$\gamma = 2p(1-p)$ $\gamma = 2p(1-p)$](https://dxdy-03.korotkov.co.uk/f/a/2/a/a2aaaa182998b401fd607c741da8aa0482.png)
.
В лучшем случае это
![$\frac12$ $\frac12$](https://dxdy-03.korotkov.co.uk/f/e/f/9/ef93ea386fd09502e2add7db109c237a82.png)
, если
![$p=\frac12$ $p=\frac12$](https://dxdy-01.korotkov.co.uk/f/4/d/3/4d33c0255173d6f3d5b02acc18e7a72b82.png)
. При других
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
оно будет меньше, плавно падая до нуля по параболе при
![$p=0,1$ $p=0,1$](https://dxdy-01.korotkov.co.uk/f/4/2/9/4294b0e87e455bf737b2d476925f1cf982.png)
.
Закономерный вопрос, а можно ли сделать КПД получше?
Если вместо двоек брать более длинные подпоследовательности, то КПД в основном будет улучшатся (иногда не меняется, как при пререходе от 2 к 3).
Там тоже надо поотдельности рассмотреть случаи, когда в последовательности какое-то фиксированное количество единиц (например при длине 4 будут случаи - 1 единица/4 варианта, 2 единицы/6 вариантов, 3 единицы/4 варианта). Все эти варианты будут равновероятны внутри одного случая. Количество вариантов - это количество сочетаний
![$C_n^k$ $C_n^k$](https://dxdy-02.korotkov.co.uk/f/5/a/8/5a8976e8f35a4f23410c044daa71b99782.png)
.
Значит для произвольной половины вариантов можно выдать "1", для другой половины "0" (если количество вариантов было нечётное, то какой-то один из них просто выбросить).
Наиболее оптимальными будут длины, когда все биномиальные коэффициенты чётные (кроме единиц на концах). Это например верно для длин равных степеням двойки
![$n=2^m$ $n=2^m$](https://dxdy-04.korotkov.co.uk/f/7/a/e/7aefc584f65f255c28ee36d11a0eab4082.png)
.
В таком случае КПД будет
![$\gamma = 1 - p^n - (1-p)^n$ $\gamma = 1 - p^n - (1-p)^n$](https://dxdy-02.korotkov.co.uk/f/d/5/a/d5aaacba1e8e2eae8627527bf6e6439d82.png)
.
Тут КПД будет приближатся к единице. И не только при
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
около
![$\frac12$ $\frac12$](https://dxdy-03.korotkov.co.uk/f/e/f/9/ef93ea386fd09502e2add7db109c237a82.png)
, но и для
![$p$ $p$](https://dxdy-03.korotkov.co.uk/f/2/e/c/2ec6e630f199f589a2402fdf3e0289d582.png)
очень маленьких или очень близких к 1.
Просто надо взять достаточно длинную подпоследовательность, чтобы вероятность что все нули или все единицы была близка к нулю.