Очікувана кількість викидів монет, щоб отримати N поспіль, враховуючи M підряд


10

У січні Interviewstreet був другий CodeSprint, який включив питання нижче. Програмна відповідь розміщується, але не містить статистичного пояснення.

(Ви можете ознайомитись з оригінальною проблемою та розміщеним рішенням, увійшовши на веб-сайт Interviewstreet за допомогою кредитів Google, а потім перейдіть до проблеми Coin Tosses з цієї сторінки .)

Викидання монет

У вас є неупереджена монета, яку ви хочете продовжувати кидати, поки не отримаєте N головок поспіль. Ви кинули монету М разів і на диво, всі кидки привели до голови.

Яка очікувана кількість додаткових закидів необхідна, поки ви не отримаєте N голосів поспіль?

Введення:
Перший рядок містить кількість випадків Т. Кожен з наступних T рядків містить два числа N і M.

Вихід:
Виведіть T рядків, що містять відповідь на відповідний тестовий випадок. Роздрукуйте відповідь округленою рівно до двох знаків після коми.

Введення зразка:
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 голови, тому більше вам не потрібно.

Усі математичні рівняння, які я придумав, мали правильні відповіді на зразки вхідних даних, наведених вище, але були помилковими для всіх інших наборів вхідних даних (які невідомі). Їх програмне рішення, як видається, вирішує проблему набагато інакше, ніж мій метод «спробувати-прийти-в-рівняння». Може хтось, будь ласка, пояснить, як придумати рівняння, яке вирішило б це?


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.

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,M)=2N+1-2M+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
Діліп Сарват

Якщо ви подивитеся на те, як реально реалізуються ці програми на комп'ютері, @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, інакше. Ми обчислюємо: ( X τ N = N ) ( X 0 = M ) M Nτ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 послідовних голів, припускаючи, що ми починаємо з M послідовних головок. Це не надто складно побачити

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) = \ початок {випадків} \ dfrac {1} {2 ^ N} & \ текст {якщо} 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) = \ початок {випадків} 1/2 ^ N & \ текст {якщо} 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 {случаи} s (M, N, m) = \ початок {випадків} 1 / {2 ^ {NM}} & \ текст {if} m = N \ 0 & \ текст {якщо} N \ sum_ {r = M + 1} ^ {N} \ dfrac {q (N, mr)} {2 ^ {rM }} & \ текст {if} N + M

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

\ end {случаи} \ mathfrak {E} (M, N) = \ sum_ {m = N} ^ \ infty m \, s (M, N, m) $$ або для кількості додаткових кроків ...

Theexpectednumberofdrawscanthenbederivedby
E(M,N)M
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.