Я не уверен, как эффективно суммировать термины, но мы можем остановиться, когда общее число бросков и общее количество успехов таковы, что даже, поскольку мы можем разделить разные порядки, которые мы могли бы достичь и в две группы с равной вероятностью, каждая из которых соответствует разным выводимым меткам. Мы должны быть осторожны, что мы еще не остановились на этих элементах, то есть на том, что ни у одного элемента нет префикса длины с такими успехами , что является четным. Я не уверен, как превратить это в ожидаемое количество сальто.t ( nnt(nt)ntn′t′(n′t′)
Проиллюстрировать:
Мы можем остановиться на TH или HT, поскольку они имеют равную вероятность. Двигаясь вниз по треугольнику Паскаля, следующие четные члены находятся в четвертом ряду: 4, 6, 4. Это означает, что мы можем остановиться после бросков, если выпала одна голова, так как мы можем создать двойственное соответствие: HHHT с HHTH и технически HTHH с THHH хотя мы бы уже остановились на тех. Точно так же выдает соответствующий HHTT с TTHH (остальное мы бы уже остановили, прежде чем дойти до них).(42)
Для все последовательности остановили префиксы. Это становится немного интереснее в где мы сопоставляем FFFFTTFT с FFFFTTTF.(52)(83)
Для после 8 бросков вероятность не остановиться составляет с ожидаемым количеством бросков, если мы остановились на . Для решения, в котором мы продолжаем катить пары, пока они не различаются, вероятность того, что вы не остановитесь, равна с ожидаемым числом бросков, если мы остановились на 4. По рекурсии - верхняя граница ожидаемых бросков для представленного алгоритма это . p=1211285316116128127⋅5316=424127<4
Я написал программу на Python для вывода точек остановки:
import scipy.misc
from collections import defaultdict
bins = defaultdict(list)
def go(depth, seq=[], k=0):
n = len(seq)
if scipy.misc.comb(n, k, True) % 2 == 0:
bins[(n,k)].append("".join("T" if x else "F"
for x in seq))
return
if n < depth:
for i in range(2):
seq.append(i)
go(depth, seq, k+i)
seq.pop()
go(8)
for key, value in sorted(bins.items()):
for i, v in enumerate(value):
print(v, "->", "F" if i < len(value) // 2 else "T")
print()
печатает:
FT -> F
TF -> T
FFFT -> F
FFTF -> T
FFTT -> F
TTFF -> T
TTFT -> F
TTTF -> T
FFFFFT -> F
FFFFTF -> T
TTTTFT -> F
TTTTTF -> T
FFFFFFFT -> F
FFFFFFTF -> T
FFFFFFTT -> F
FFFFTTFF -> T
FFFFTTFT -> F
FFFFTTTF -> T
FFFFTTTT -> F
TTTTFFFF -> T
TTTTFFFT -> F
TTTTFFTF -> T
TTTTFFTT -> F
TTTTTTFF -> T
TTTTTTFT -> F
TTTTTTTF -> T