Ожидаемое количество бросков монеты, чтобы получить N подряд, учитывая M подряд

10

В январе у Interviewstreet появился второй CodeSprint, в который вошел вопрос, приведенный ниже. Программный ответ опубликован, но не содержит статистического объяснения.

(Вы можете увидеть оригинальную проблему и помещаемые решение, зарегистрировавшись на сайт Interviewstreet с кредиткой Google , а затем идти к проблеме монет ворочаются с этой страницы .)

Монеты

У вас есть беспристрастная монета, которую вы хотите бросать, пока не получите N последовательных голов. Вы бросили монету M раз, и неожиданно все броски привели к головам.

Какое ожидаемое количество дополнительных бросков необходимо, пока вы не получите N последовательных голов?

Входные данные:
первая строка содержит количество случаев T. Каждая из следующих строк T содержит два числа N и M.

Выход:
Выведите T строк, содержащих ответ для соответствующего теста. Выведите ответ, округленный до 2 знаков после запятой.

Пример ввода:
4
2 0
2 1
3 3
3 2

Пример вывода:
6,00
4,00
0,00
8,00

Примеры объяснений:
если N = 2 и M = 0, вам нужно продолжать подбрасывать монету, пока не получите 2 головы подряд. Нетрудно показать, что в среднем требуется 6 бросков монет.
Если N = 2 и M = 1, вам нужно 2 последовательных головы и уже иметь 1. Вы должны бросить еще раз, несмотря ни на что. В этом первом броске, если у вас есть головы, все готово. В противном случае вам нужно начинать все сначала, когда счетчик сбрасывается подряд, и вы должны продолжать подбрасывать монету, пока не получите N = 2 последовательных головы. Таким образом, ожидаемое количество подбрасываний монет составляет 1 + (0,5 * 0 + 0,5 * 6) = 4,0. Если N = 3 и M = 3, у вас уже есть 3 головы, поэтому вам больше не нужно подбрасывать.

У всех математических уравнений, которые я придумал, были правильные ответы для приведенных выше примеров входных данных, но они были неправильными для всех других их входных наборов (которые не известны). Их программное решение, похоже, решает проблему совсем не так, как мой метод «попробуй придумать с уравнением». Может кто-нибудь объяснить, как придумать уравнение, которое решило бы это?

Polshgiant
источник
1
Смотрите также здесь, где также мы находим результат данный Дэниелом Джонсоном ниже. 2N+12M+1
Дилип Сарвейт

Ответы:

8

Это вычислительное упражнение, поэтому думайте рекурсивно . Текущее состояние подбрасывания монеты определяется упорядоченной парой с . Пусть ожидаемое количество сальто для достижения последовательных головок будет :N M 0 N e ( N , M )(N,M)NM0Ne(N,M)

(1) С вероятностью 50% на следующий бросок попадут головы, которые приведут вас к состоянию , и на 50% с вероятностью на следующий бросок вы попадете в состояние . Это стоит один флип. Следовательно, ожидание (рекурсивно) определяется как( N , 0 )(N,M+1)(N,0)

e(N,M)=12e(N,M+1)+12e(N,0)+1.

(2) Базовые условия: вы уже предусмотрели, что

e(N,0)=2N+12

и, очевидно,

e(N,N)=0

(больше никаких переворотов не требуется).

Вот соответствующая программа Mathematica (включая кеширование промежуточных результатов для ускорения рекурсии, что фактически делает ее решением для динамического программирования):

e[n_, m_] /; n > m > 0 := e[n, m] = 1 + (e[n, m + 1] + e[n, 0])/2 // Simplify
e[n_, 0] := 2^(n + 1) - 2
e[n_, n_] := 0

Программа будет выглядеть аналогично на других языках программирования, которые поддерживают рекурсию. Математически, мы можем проверить, что просто проверив рекурсию, потому что это очевидно верно для базовых случаев:e(N,M)=2N+12M+1

2N+12M+1=1+(2N+12M+2+2N+12)/2,

что верно для любых и , QED.НMN


В более общем смысле , тот же подход установит, что когда монета имеет вероятность голов. Трудной частью является разработка базового условия . Это делается путем выслеживания шагов рекурсии до тех пор, пока, наконец, будет выражено в терминах самого себя и решения: pe(N,0)Ne(N,0)e(N,M)=pNpM1ppe(N,0)Ne(N,0)

e(N,0)=1+pe(N,1)+(1p)e(n,0)=1+p(1+pe(N,2)+(1p)e(N,0))+(1p)e(N,0)=1+p+p2++pN1+(1p)[1+p++pN1]e(N,0);e(N,0)=1pN1p+(1pN)e(N,0);e(N,0)=pN11p.
Whuber
источник
1
Возможно, лучше работать итеративно, а не рекурсивно ? У вас что дает поэтому и т. Д.Или разностное уравнение может быть решено «теоретически», а не итерацией. e(N,M+1)=2e(N,M)-2N+1 e ( N , 1 )
e(N,M)=12e(N,M+1)+12e(N,0)+1
e(N,M+1)=2e(N,M)2N+1
e(N,1)=2e(N,0)2N+1=2(2N+12)2N+1=2N+14e(N,2)=2e(N,1)2N+1=2(2N+14)2N+1=2N+18
e(N,M)=2N+12M+1.
Дилип Сарвейт
@Dilip Выводы, которые вы рисуете как «что дает» и «и так далее», являются рекурсивными. Какой метод решения вы имеете в виду под «решенным теоретически»?
whuber
На мой взгляд, разница между рекурсивным и итеративным заключается в методе работы. Для отношения рекурсия вычисляет как а итерация говорит, что «Теоретически» означало решение разностного уравнения путем нахождения характеристического полинома, определения его корней, а затем подгонки общего решения к начальным условиям вместо простого вычисления, как указано выше.
x(n)=2x(n1),  x(0)=1,
x(n)
x(n)=2x(n1)=2(2x(n2))=2(2(2x(n3)))==2(2(2x(0))=2n
x(0)=1x(1)=2x(0)=2x(2)=2x(1)=22x(n)=2x(n1)=22n1=2n.
Дилип Сарвейт,
С точки зрения программирования, программа find_x(n)является рекурсивной , если она говорит что - то вроде , if n=0 return 1 else return 2*find_x(n-1)в котором find_xназывает себя раз, в то время как итеративный программа будет сказать что - то вродеny = 1; while n > 0 do begin y=2*y; n=n-1 end; return y
Дилип Sarwate
Если вы посмотрите, как эти программы на самом деле реализуются на компьютере, @Dilip, во многих средах (например, R) они почти не различаются. (В одном случае вы создаете, а затем обрабатываете вектор, 1:nа в другом вы обнаруживаете, что n:1он был помещен в стек и обработан в обратном порядке.) Но часть моей точки зрения была концептуальной : ваш первоначальный комментарий говорил о «итеративной работе». Это относится к анализу, а не к какой-либо компьютерной программе. Но это тривиальные, касательные моменты, обсуждение которых не требует расширения этой ветки комментариев.
whuber
5

Чтобы решить эту проблему, я буду использовать случайные процессы, время остановки и динамическое программирование.

Сначала несколько определений:

Xn#(of consecutive heads after the nth flip)
Мы также допускаем, чтобы значение означало количество последовательных головок, прежде чем мы начнем. Таким образом, для и последовательности переворотов HHTHHHTHTTHH соответствующие значения равны 120123010012. Если бы у нас было , значения X были бы (M + 1) (M + 2) 0123010012.X0X0=0XX0=M

Затем определите следующие времена остановки:

τNmin{k:Xk=N} and τ0min{k>1:Xk=0}

Значение, которое мы ищем, - это ожидаемое значение , количество переворотов, необходимое для наблюдения N последовательных переворотов , учитывая, что мы уже наблюдали M последовательных переворотов . Предположим, что в качестве ответа тривиально 0 в противном случае. Мы вычисляем:τN(XτN=N)(X0=M)MN

E[τN|X0=M]=E[τN1{τN<τ0}+τN1{τN>τ0}|X0=M]
=(NM)(12)NM+E[τ0|τN>τ0,X0=M]+(1(12)NM)E[τN|X0=0]
Это позволяет нам вычислить два последних условных ожидания.

Первый соответствует ожидаемому количеству переворотов, прежде чем получить хвост, предполагая, что хвост перевернут, прежде чем N последовательных головок будут замечены, если мы начнем с М последовательных головок. Это не так сложно увидеть

E[τ0|τN>τ0,X0=M]=j=1NM(j)(12)j=2(NM+2)(12)NM

Теперь все, что нам нужно сделать, - это вычислить второе условное ожидание, которое соответствует ожидаемому числу бросков, которое требуется для наблюдения N последовательных головок, начиная с 0. С помощью аналогичных вычислений мы видим, что

E[τN|X0=0]=E[τN1{τN<τ0}+τN1{τN>τ0}|X0=0]
=N(12)N+E[τ0|τN>τ0,X0=0]+(1(12)N)E[τN|X0=0]
=2N{N(12)N+(2(N+2)(12)N)}
=2N+12

Это дает окончательный ответ:

E[τN|X0=M]=(NM)(12)NM+2(NM+2)(12)NM+(1(12)NM)(2N+12)
=2N+12M+1

Это согласуется с четырьмя тестовыми примерами, которые вы перечислили. С таким простым ответом может быть более простой способ вычислить это.

Дэниел Джонсон
источник
1
Это более сложный способ ее решения, чем рекурсивная идея, перечисленная выше, но чрезвычайно полезно увидеть оба подхода изложенными вместе. Большинству людей не нравится, что методы остановки времени можно использовать и для небольших практических задач.
Ely
2

Предупреждение: следующее не может считаться правильным ответом в том смысле, что оно не дает решения вопроса в закрытой форме, особенно по сравнению с предыдущими ответами . Однако я нашел подход достаточно интересным для разработки условного распределения.

Рассмотрим предварительный вопрос о получении последовательности из голов из бросков с вероятностью . Это задается формулой повторения Действительно, я рассуждаю так: ни одно из последовательных голов из ничьих не может быть разложено в соответствии с первым появлением хвоста из первого бросает. Обусловление того, происходит ли этот первый хвост в первом, втором, ..., м розыгрыше, приводит к этому рекуррентному соотношению.Nk1p(N,k)

p(N,k)={1if k<Nm=1N12mp(N,km)else
NkNN

Далее, вероятность получения первых последовательных N голов в бросках составляет $$ q (N, m) = \ begin {case} \ dfrac {1} {2 ^ N} & \ text {if} m = N \mN

     p(N,m-N-1) \dfrac{1}{2^{N+1}} &\text{if } N<m<2N+1
     \end{cases}

$$ Первый случай не требует пояснений. второй случай соответствует хвосту, произошедшему на м розыгрыше, за которым следуют голов, а последний случай запрещает последовательных головок до го розыгрыша. (Два последних случая могут быть сведены в один, предоставлено!)mN1NNmN1

Теперь вероятность получить голов первым и первые последовательных голов ровно по бросков (и не меньше) составляет $$ r (M, N, m) = \ begin {case} 1/2 ^ N & \ text {if} m = N \MN mN

     0 &\text{if } N<m\le N+M\\

      \dfrac{1}{2^{M}}\sum_{r=M+1}^{N}\dfrac{1}{2^{r-M}}q(N,m-r)&\text{if } N+M<m

\ end {case} s (M, N, m) = \ begin {case} 1 / {2 ^ {NM}} & \ text {if} m = N \ 0 & \ text {if} N \ sum_ {r = M + 1} ^ {N} \ dfrac {q (N, mr)} {2 ^ {rM }} & \ text {if} N + M

Hencetheconditionalprobabilityofwaiting$m$stepstoget$N$consecutiveheadsgiventhefirst$M$consecutiveheadsis

\ end {case} \ mathfrak {E} (M, N) = \ sum_ {m = N} ^ \ infty m \, s (M, N, m) $$ или для количества дополнительных шагов ...Е ( М , Н ) - М

Theexpectednumberofdrawscanthenbederivedby
E(M,N)M
Сиань
источник