Số lần tung đồng xu dự kiến ​​sẽ nhận được N liên tiếp, cho M liên tiếp


10

Interviewstreet đã có CodeSprint thứ hai vào tháng 1 bao gồm câu hỏi dưới đây. Câu trả lời theo chương trình được đăng nhưng không bao gồm phần giải thích thống kê.

(Bạn có thể xem vấn đề ban đầu và giải pháp được đăng bằng cách đăng nhập vào trang web Interviewstreet bằng các khoản tín dụng của Google và sau đó chuyển đến vấn đề Coin Tosses từ trang này .)

Tiền xu

Bạn có một đồng xu không thiên vị mà bạn muốn tiếp tục tung cho đến khi bạn nhận được N đầu liên tiếp. Bạn đã ném đồng xu M lần và thật ngạc nhiên, tất cả các lần ném đều dẫn đến kết quả.

Số lần ném bổ sung cần thiết cho đến khi bạn nhận được N đầu liên tiếp là bao nhiêu?

Đầu vào:
Dòng đầu tiên chứa số trường hợp T. Mỗi dòng T tiếp theo chứa hai số N và M.

Đầu ra:
Đầu ra T dòng chứa câu trả lời cho trường hợp thử nghiệm tương ứng. In câu trả lời làm tròn đến đúng 2 chữ số thập phân.

Nhập mẫu:
4
2 0
2 1
3 3
3 2

Output mẫu:
6,00
4,00
0,00
8,00

Giải thích mẫu:
Nếu N = 2 và M = 0, bạn cần tiếp tục tung đồng xu cho đến khi bạn nhận được 2 đầu liên tiếp. Không khó để chỉ ra rằng trung bình, cần 6 lần tung đồng xu.
Nếu N = 2 và M = 1, bạn cần 2 đầu liên tiếp và đã có 1. Bạn cần phải ném một lần nữa bất kể điều gì. Trong lần ném đầu tiên đó, nếu bạn nhận được đầu, bạn đã hoàn thành. Mặt khác, bạn cần bắt đầu lại, vì bộ đếm liên tiếp đặt lại và bạn cần tiếp tục tung đồng xu cho đến khi bạn nhận được N = 2 đầu liên tiếp. Do đó, số lần tung đồng xu dự kiến ​​là 1 + (0,5 * 0 + 0,5 * 6) = 4.0 Nếu N = 3 và M = 3, bạn đã có 3 đầu, do đó bạn không cần thêm lần tung nào nữa.

Tất cả các phương trình toán học mà tôi đã đưa ra đều có câu trả lời đúng cho dữ liệu đầu vào mẫu được liệt kê ở trên, nhưng đã sai đối với tất cả các bộ đầu vào khác của chúng (không được biết). Giải pháp lập trình của họ dường như giải quyết vấn đề khác xa so với phương pháp thử phương pháp cố gắng của tôi. Ai đó có thể vui lòng giải thích làm thế nào để đưa ra một phương trình sẽ giải quyết điều này?


1
Xem thêm ở đây , nơi chúng tôi cũng tìm thấy kết quả được đưa ra bởi Daniel Johnson bên dưới. 2N+12M+1
Dilip Sarwate

Câu trả lời:


8

Đây là một bài tập tính toán, vì vậy hãy suy nghĩ đệ quy . Trạng thái hiện tại của việc lật đồng xu được xác định bởi cặp được đặt hàng với . Đặt số lần lật dự kiến ​​để đạt đầu liên tiếp là :(N,M)NM0Ne(N,M)

(1) Có 50% khả năng lần lật tiếp theo sẽ là người đứng đầu, đưa bạn đến trạng thái và 50% cơ hội lần lật tiếp theo sẽ là đuôi, đưa bạn đến trạng thái . Chi phí này một lần lật. Do đó, kỳ vọng (đệ quy) được đưa ra bởi(N,M+1)(N,0)

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

(2) Điều kiện cơ bản: bạn đã quy định rằng

e(N,0)=2N+12

và rõ ràng

e(N,N)=0

(không cần lật thêm).

Đây là chương trình Mathicala tương ứng (bao gồm lưu trữ các kết quả trung gian để tăng tốc độ đệ quy, điều này làm cho nó trở thành một giải pháp lập trình động một cách hiệu quả):

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

Chương trình sẽ trông giống như trong các ngôn ngữ lập trình khác hỗ trợ đệ quy. Về mặt toán học, chúng ta có thể xác minh rằng chỉ bằng cách kiểm tra đệ quy, vì rõ ràng nó giữ cho các trường hợp cơ sở:e(N,M)=2N+12M+1

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

điều này đúng với mọi và , QED.MN


Tổng quát hơn , cách tiếp cận tương tự sẽ xác định rằng khi đồng xu có xác suất của các đầu. Phần cứng đang xử lý điều kiện cơ bản . Điều đó được thực hiện bằng cách loại bỏ đệ quy bước cho đến khi cuối cùng được thể hiện dưới dạng chính nó và giải quyết: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
Có lẽ làm việc lặp đi lặp lại thay vì đệ quy có thể tốt hơn? Bạn có mang lại cho và vì vậy và cứ thế choHoặc phương trình sai khác có thể được giải "theo lý thuyết" thay vì lặp.
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

@Dilip Các suy luận bạn vẽ cả ở "cái nào cho" và "vân vân" được đệ quy. Bạn có phương pháp giải pháp nào trong đầu bằng cách "giải quyết trên lý thuyết"?
whuber

Theo tôi, sự khác biệt giữa đệ quy và lặp là phương pháp làm việc. Đối với mối quan hệ đệ quy tính là trong khi lặp lại nói "Về mặt lý thuyết" có nghĩa là giải một phương trình khác biệt bằng cách tìm đa thức đặc trưng, ​​xác định gốc của nó và sau đó điều chỉnh giải pháp chung cho các điều kiện ban đầu, thay vì tính toán đơn giản như trên.
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.
Dilip Sarwate 24/03/13

Từ quan điểm lập trình, một chương trình find_x(n)được đệ quy nếu nó nói một cái gì đó giống như if n=0 return 1 else return 2*find_x(n-1)trong đó find_xtự gọi là lần, trong khi một chương trình lặp lại sẽ nói một cái gì đó nhưny = 1; while n > 0 do begin y=2*y; n=n-1 end; return y
Dilip Sarwate 24/03/13

Nếu bạn nhìn vào cách các chương trình đó thực sự được thực hiện trên máy tính, @Dilip, trong nhiều môi trường (chẳng hạn như R) chúng hiếm khi khác nhau. (Trong một trường hợp bạn tạo và sau đó xử lý vector 1:nvà trong khác mà bạn sẽ khám phá ra rằng n:1đã được đặt trên ngăn xếp và xử lý theo hướng ngược lại.) Nhưng một phần của quan điểm của tôi là khái niệm : Cảm nhận ban đầu của bạn nói về "làm việc lặp đi lặp lại." Điều đó đề cập đến phân tích và không cho bất kỳ chương trình máy tính. Nhưng đây là những điểm tầm thường, tiếp tuyến mà cuộc thảo luận của họ không đảm bảo mở rộng chủ đề bình luận này.
whuber

5

Để giải quyết vấn đề này, tôi sẽ sử dụng các quy trình ngẫu nhiên, thời gian dừng và lập trình động.

Đầu tiên, một số định nghĩa:

X 0 X 0 = 0 X X 0 = M

Xn#(of consecutive heads after the nth flip)
Chúng tôi cũng cho phép một giá trị cho có nghĩa là số lượng các đầu liên tiếp trước khi chúng tôi bắt đầu. Vì vậy, với và chuỗi lần lật HHTHHHTHTTHH, các giá trị tương ứng của là 120123010012. Nếu chúng ta có , các giá trị của X sẽ là (M + 1) (M + 2) 0123010012.X0X0=0XX0=M

Sau đó, xác định thời gian dừng sau:

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

Giá trị mà chúng tôi đang tìm kiếm là giá trị mong đợi của , số lần lật cần thiết để quan sát N lần lật liên tiếp , với điều kiện là chúng tôi đã quan sát thấy các lần lật liên tiếp M . Giả sử là câu trả lời không quan trọng bằng 0. Chúng tôi tính toá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]
Điều này khiến chúng tôi tính hai kỳ vọng có điều kiện cuối cùng.

Đầu tiên tương ứng với số lần lật dự kiến ​​trước khi nhận được một cái đuôi giả sử đuôi bị lật trước khi N đầu liên tiếp được quan sát giả sử chúng ta bắt đầu với M đầu liên tiếp. Không quá khó để thấy điều đó

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

Bây giờ tất cả những gì chúng ta phải làm là tính toán kỳ vọng có điều kiện thứ hai tương ứng với số lần lật dự kiến ​​cần để quan sát N đầu liên tiếp bắt đầu từ 0. Với một phép tính tương tự, chúng ta thấy rằng

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

Điều này đưa ra câu trả lời cuối cùng về:

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

Điều này đồng ý với bốn trường hợp thử nghiệm bạn đã liệt kê. Với một câu trả lời đơn giản như vậy, có thể có một cách dễ dàng hơn để tính toán điều này.


1
Đây là một cách khó hơn để giải quyết nó so với ý tưởng đệ quy được liệt kê ở trên, nhưng thật hữu ích khi thấy cả hai cách tiếp cận được đặt ra cùng nhau. Hầu hết mọi người không đánh giá cao cách dừng phương pháp thời gian có thể được sử dụng cho các vấn đề nhỏ, thực tế.
ely

2

Cảnh báo: những điều sau đây có thể không được coi là một câu trả lời thích hợp ở chỗ nó không cung cấp giải pháp dạng đóng cho câu hỏi, đặc biệt. khi so sánh với các câu trả lời trước . Tuy nhiên tôi thấy cách tiếp cận đủ thú vị để tìm ra phân phối có điều kiện.

Hãy xem xét câu hỏi sơ bộ về việc lấy một chuỗi đầu ra khỏi ném, với xác suất . Điều này được đưa ra bởi công thức lặp lại Thật vậy, lý do của tôi là không có đầu liên tiếp nào trong số rút ra có thể bị phân hủy theo lần xuất hiện đầu tiên của đuôi ra khỏi đầu tiên ném. Điều chỉnh về việc cái đuôi đầu tiên này có xảy ra ở lần đầu tiên, lần thứ hai, ..., lần thứ dẫn đến mối quan hệ tái phát này hay không.Nk1p(N,k)

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

Tiếp theo, xác suất nhận được các đầu N liên tiếp đầu tiên trong ném là $$ q (N, m) = \ started {case} \ dfrac {1} {2 ^ N} & \ text {if} m = KhôngmN

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

$$ Trường hợp đầu tiên là tự giải thích. trường hợp thứ hai tương ứng với một cái đuôi xảy ra ở lần rút thứ , tiếp theo là đầu và trường hợp cuối cùng cấm đầu liên tiếp trước lần rút thứ . (Hai trường hợp cuối cùng có thể được cô đọng thành một, được cấp!)mN1NNmN1

Bây giờ, xác suất để có được đầu trước và các đầu liên tiếp đầu tiên trong chính xác ném (và không ít hơn) là $$ r (M, N, m) = \ started {case} 1/2 ^ N & \ văn bản {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) = \ started {case} 1 / {2 ^ {NM}} & \ text {if} m = N \ 0 & \ text {if} N \ sum_ {r = M + 1} ^ {N} \ dfrac {q (N, mr)} {2 ^ {rM }} & \ văn bản {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) $$ hoặc cho số bước bổ sung ...

Theexpectednumberofdrawscanthenbederivedby
E(M,N)M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.