Mの連続が与えられた場合、Nの連続が得られると予想されるコイントスの数


10

Interviewstreetには、1月に2番目のCodeSprintがあり、以下の質問が含まれていました。プログラムによる回答が投稿されていますが、統計的な説明は含まれていません。

(Googleの資格情報を使用してInterviewstreet Webサイトにサインインし、このページからコイントス問題に移動すると、元の問題と投稿された解決策を確認できます。)

コイントス

公平なコインを持っているので、N枚の連続した表が出るまでトスを続けます。あなたはコインをM回投げましたが、驚くべきことに、すべての投げは表になりました。

N連続の頭を取得するまでに必要な追加のトスの予想数はいくつですか?

入力:
最初の行にはケースの数Tが含まれています。次のT行のそれぞれには、2つの数値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、2012

回答:


8

これは計算の練習なので、再帰的に考えます。コインフリッピングの現在の状態は、の順序ペアによって決定され。連続ヘッドに到達するために予想されるフリップの数をます。N M 0 NのE N M (N,M)NM0Ne(N,M)

(1)次のフリップがヘッドになる可能性が50%あり、状態に移動します。次のフリップがテールになる可能性が50%あり、状態。これには1フリップのコストがかかります。したがって、期待値(再帰的に)は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


より一般的には、コインに表の確率がある場合、同じアプローチでが確立されます。難しいのは、基本条件です。これは、最終的にがそれ自体に関して表現され、解決するまで、ステップを再帰的に追跡することによって行われます。 peN0NeN0e(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)=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 Sarwate、2012

@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.
ディリップSarwate

プログラミングの観点から、プログラムは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ケースでは、作成し、ベクトルを処理1:nし、他にあなたが発見するでしょうn:1逆にスタックに配置され、処理されています。)しかし、私のポイントの一部でした概念:あなたの最初のコメントを語った「反復的に取り組んでいます。」それは分析に言及し、コンピュータプログラムには言及しませんでした。しかし、これらは、このコメントスレッドを拡張することを保証するものではない、些細な接線ポイントです。
whuber

5

この問題を解決するために、確率的プロセス、停止時間、および動的プログラミングを使用します。

まず、いくつかの定義:

Xn#(of consecutive heads after the nth flip)
値は、開始前の連続ヘッドの数を意味することもできます。したがって、で、フリップのシーケンスがHHTHHHTHTTHHの場合、の対応する値はの場合、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]
これで、最後の2つの条件付き期待値を計算できます。

最初は、Mの連続したヘッドで開始すると仮定して、Nの連続したヘッドが観察される前にテールがフリップされると仮定して、テールを取得する前の予想されるフリップ数に対応します。それを見ることはそれほど難しくありません

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

次に、2番目の条件付き期待値を計算するだけです。これは、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

これは、リストした4つのテストケースに同意します。そのような単純な答えで、これを計算するより簡単な方法があるかもしれません。


1
これは、上記の再帰的なアイデアよりも解決するのが難しい方法ですが、両方のアプローチが一緒に配置されていることを確認すると非常に役立ちます。ほとんどの人は、時間を停止する方法が小さな実際的な問題にも使用できる方法を高く評価していません。
エリー

2

警告: 以下は、質問に対する閉じた形式のソリューションを提供しないため、適切な回答とは見なされない可能性があります。以前の回答と比較すると。しかし、この方法は条件付き分布を計算するのに十分興味深いものでした。

一連の取得の予備的な問題を検討外に頭を確率で、スロー。これは、漸化式によって与えられ 確かに、私の推論は、回のドローからの連続するヘッドは、最初のテイルの最初の発生に従って分解できないということですスロー。この最初のテールが最初、2番目、...、番目のドローで発生するかどうかの条件付けは、この再帰関係につながります。Nk1p(N,k)

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

次に、スローで最初の連続するNヘッドを取得する確率は$$ q(N、m)= \ begin {cases} \ 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}

$$最初のケースは自明です。2番目のケースは、番目のドローで発生するテールに対応し、ヘッドが続きます。最後のケースは、番目のドローの前に連続するヘッドを禁止します。(最後の2つのケースは1つにまとめることができます!)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)$$または追加のステップ数については ...EM N - Mを

Theexpectednumberofdrawscanthenbederivedby
E(M,N)M
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.