M 연속시 N 연속을 얻기 위해 예상되는 동전 던지기 수


10

Interviewstreet는 아래 질문을 포함하여 1 월에 두 번째 CodeSprint를 가졌습니다. 프로그래밍 방식의 답변이 게시되었지만 통계적인 설명은 포함되어 있지 않습니다.

(Google creds를 사용하여 Interviewstreet 웹 사이트에 로그인 한 후이 페이지 에서 Coin Tosses 문제로 이동하면 원래 문제와 게시 된 솔루션을 볼 수 있습니다 .)

동전 던지기

당신은 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 개의 헤드가 있으므로 더 이상 던질 필요가 없습니다.

내가 생각해 낸 모든 수학 방정식은 위에 나열된 샘플 입력 데이터에 대한 정답을 가지고 있지만 다른 모든 입력 세트 (알 수 없음)에 대해서는 잘못되었습니다. 그들의 프로그래밍 방식 솔루션은 방정식 시도 방법과는 크게 다른 문제를 해결하는 것으로 보입니다. 누군가 이것을 해결하는 방정식을 생각해내는 방법을 설명해 주시겠습니까?


1
참조 여기 또한 우리가 찾는 곳 아래 다니엘 존슨에 의해 지정된 결과를. 2N+12M+1
Dilip Sarwate

답변:


8

이것은 계산 연습이므로 재귀 적으로 생각하십시오 . 동전 던지기의 현재 상태 순서쌍에 의해 결정된다 와 . 연속 헤드 에 도달 할 것으로 예상되는 플립 수를 .N M 0 N e ( N , M )(N,M)NM0Ne(N,M)

(1) 다음 플립이 나올 확률은 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.NMN


보다 일반적으로 , 동일한 접근법은 경화가 확률 가질 때P헤드한다. 어려운 부분은 기본 조건e(N,0)를 계산합니다. 그것은마지막으로e(N,0)이 자체로 표현되고 해결될 때까지N단계를재귀 밖으로 쫓아서 수행됩니다.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 ) = 1e(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+12M+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 Sarwate

@Dilip "제공하는"및 "등"에서 도출 한 추론은 재귀 적입니다. "이론적으로 해결 된"어떤 솔루션 방법을 염두에두고 있습니까?
whuber

내 생각에 재귀와 반복의 차이점은 작업 방법입니다. 관계를 들어 재귀 계산 X ( N ) 로서 X ( n은 ) = 2 (X)를 ( N - 1 ) = 2 ( 2 X ( N - 2 ) ) =
x(n)=2x(n1),  x(0)=1,
x(n)반복 x ( 0 ) = 1 x ( 1 ) = 2 x ( 0 이라고 표시하는 동안 2 ( 2 ( 2 x ( n 3 ) ) ) = = 2 ( 2 ( 2 x ( 0 ) ) = 2 n ) = 2 x ( 2 ) = 2
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.
Dilip Sarwate

find_x(n)if n=0 return 1 else return 2*find_x(n-1)find_xny = 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)
X0X0=0XX0=M

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

우리가 찾고있는 값은 의 예상 값이며 , M 연속 플립 을 이미 관찰 한 경우 N 연속 플립 을 관찰하는 데 걸리는 플립 수입니다 . 대답이 사소한 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]
이렇게하면 마지막 두 가지 조건부 기대치를 계산할 수 있습니다.

첫 번째는 M 연속 헤드로 시작한다고 가정하고 N 연속 헤드가 관찰되기 전에 테일이 플립되었다고 가정하고 테일을 가져 오기 전에 예상되는 플립 수에 해당합니다. 그것을 보는 것은 너무 어렵지 않습니다

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

이제 우리가해야 할 일은 0부터 시작하여 N 연속 헤드를 관찰하는 데 걸리는 예상 플립 수에 해당하는 두 번째 조건부 기대 값을 계산하는 것입니다. 유사한 계산을 통해

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

경고 : 다음은 질문에 대한 폐쇄 형 솔루션을 제공하지 않는다는 점에서 다음과 같은 정답으로 간주되지 않을 수 있습니다. esp. 이전 답변 과 비교할 때 . 그러나 조건부 분포를 풀기에는 충분히 흥미로운 접근법이 발견되었습니다.

확률 로 던지기에서 헤드 시퀀스를 얻는 예비 질문을 고려하십시오 . 이것은 재귀 공식 의해 주어집니다 사실, 내 추론은 처음부터 꼬리의 첫 번째 발생에 따라 드로우에서 연속 된 헤드 가 분해 될 수 없다는 것입니다. 던졌습니다. 이 첫 번째 꼬리가 첫 번째, 두 번째, ..., 번째 드로우 에서 발생하는지 여부에 대한 조건은 이 재발 관계로 이어집니다.Nk1p(N,k)

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

다음 으로 throws 에서 첫 번째 연속 N 헤드 를 얻을 확률 은 $$ q (N, m) = \ begin {cases} \ dfrac {1} {2 ^ N} & \ text {if} m = 엔\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 {cases} 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 {cases} s (M, N, m) = \ begin {cases} 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 {cases} \ mathfrak {E} (M, N) = \ sum_ {m = N} ^ \ infty m \, s (M, N, m) $$ 또는 추가 단계 수는 ...E ( M , N ) - M을

Theexpectednumberofdrawscanthenbederivedby
E(M,N)M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.