拋硬幣直到連續若干次正面的概率


問題

 
 
  1. 假設有一個硬幣,拋出字(背面)和花(正面)的概率都是0.5,而且每次拋硬幣與前次結果無關。現在做一個游戲,連續地拋這個硬幣,直到連續出現兩次字為止,問平均要拋多少次才能結束游戲?注意,一旦連續拋出兩個“字”向上游戲就結束了,不用繼續拋。  

上面這個題目我第一次見到是在pongba的TopLanguage的一次討論上,提出問題的人為Shuo Chen,當時我給出了一個解法,自認為已經相當簡單了,先來考慮一下拋硬幣的過程:首先先拋一枚硬幣,如果是花,那么需要重頭開始;如果是字,那么再拋一枚硬幣,新拋的這枚如果也是字,則游戲結束,如果是花,那么又需要重頭開始。根據這個過程,設拋硬幣的期望次數為T,可以得到關系

  T = 1 + 0.5T + 0.5( 1 + 0.5 * 0 + 0.5T)

解方程可得到 T = 6. 由於上面這個方法只能得到期望,而無法得到方差以及具體某個事件的概率,后來我又仔細分析了一下,推出了概率生成函數為(推導的過程暫時略過,后面你會看到一個更一般、更簡單的推導)

  

於是可以算出方差 V = G''(1) + G'(1) - G'(1)^2 = 22。將G(z)根據Rational Expansion Theorem [CMath 7.3]展開,可以得到需要拋n次硬幣的概率為

  

其中Fn是Fibonacci數列的第n項。到這里,我覺得這個問題似乎已經完全解決了,直到昨天看到Matrix67的牛B帖。在此帖中Matrix67大牛用他那神一般的數學直覺一下將需要連續拋出n個字的一般情形給解決了,而且得出的結果相當簡潔:Tn = 2^(n+1) - 2,其中Tn為首次出現連續的n個字的期望投擲數。這也給了我一些啟發,我試着將上面的過程進行推廣,居然得到一個簡單得出人意料的解法(甚至比上面n=2的推導過程還簡單)。這個解法的關鍵在於下面這個遞推關系

  Tn = Tn-1 + 1 + 0.5 * Tn

也即是有 Tn = 2 * Tn-1 + 2。由於 T1 = 2,因此可以得到 Tn = 2^(n+1) – 2。上面的遞推關系是怎么來的呢,一個直觀的理解是這樣的:首先先拋擲Tn-1次,得到連續的n-1個字,然后再拋一次,若是字,則游戲結束;否則需要重頭開始,也就是說又需要 Tn 次。

期望投擲次數已經得出來了,但是我們還想知道方差、恰好需要投擲 m 次的概率等其它一些更具體的性質。為了方便理解概率的分布情況,我先用程序生成了一個概率表如下所示。在下表中,第n行、第m列的元素為 Pnm,表示首次出現連續n個字的投擲數為m的概率。

1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512 1/1024
0 1/4 1/8 2/16 3/32 5/64 8/128 13/256 21/512 34/1024
0 0 1/8 1/16 2/32 4/64 7/128 13/256 24/512 44/1024
0 0 0 1/16 1/32 2/64 4/128 8/256 15/512 29/1024
0 0 0 0 1/32 1/64 2/128 4/256 8/512 16/1024

仔細觀察上表,你發現什么有趣的性質沒?如果忽略掉分母的話,那么第n行恰好是一個n階Fibonacci數列。例如可以考查各行的最后一列,有

第一行:1 = 1

第二行:34 = 21 + 13

第三行:44 = 24 + 13 + 7

第四行:29 = 15 + 8 + 4 + 2

第五行:16 = 8 + 4 + 2 + 1 + 1

怎么解釋這個現象呢?我們再來仔細考慮一下擲硬幣的過程,為方便在下文中用1表示字,用0表示花,於是我們的目標是要恰好使用m次投擲,得到連續的n個1.

若第一次的結果為 0,那么剩下的任務就是恰好使用m-1次投擲得到到連續的n個1.

若前兩次的結果為 10, 那么剩下的任務就是恰好使用m-2次投擲得到到連續的n個1.

若前三次的結果為 110, 那么剩下的任務就是恰好使用m-3次投擲得到到連續的n個1.

若前四次的結果為 1110, 那么剩下的任務就是恰好使用m-4次投擲得到到連續的n個1.

若前n-1次的結果為 1…10(n-2個1), 那么剩下的任務就是恰好使用1次投擲得到到連續的n個1.

你或許已經看出來了,這里實際上是在枚舉首次出現0的位置。由於首個0出現在位置i的概率為1/2^i,於是得到Pnm的遞推公式

  

於是根據初始條件:,我們可以推出所有事件的概率。現在來推一下概率生成函數,設需要得到連續n個1的投擲數的概率生成函數為Gn(z),於是有

  

根據上面的遞推公式和初始條件,可以得到

  

於是可解得

  

分別代入 n = 1 和 n = 2 可以得到

  

  

以我們前面得到的結果一致,這證明這個概率生成函數的確是正確的。有了生成函數后,我們又多了一種計算期望的方式

  

而方差也可以非常容易的得到

  

至此,這個拋硬幣的問題終於應該算是被完全解決了,完。

 ————————————————————————————————————————————————

題目: 一個骰子,6面,1個面是 1, 2個面是2, 3個面是3, 問平均擲多少次能使1、2、3都至少出現一次。

方法: 面對面試概率題幾乎屢試不爽的分叉樹遞歸列方程法。

這是一個求數學期望的問題,最終是求1,2,3出現至少一次的最短長度的期望。

這樣分叉樹的每個節點是一個期望狀態,而每個分叉是一次投擲結果。將后續期望出現1、2、3各至少一次的情形記作L123(即題目所求),將后續期望出現1、2各至少一次(3無關)情形記作L12,而1至少一次(2,3無關)情形L1,其余數值符號類推,則樹結構如下(列出4級結構已經足夠):

第一級(樹根) 第二級 第三級 第四級別
L123 擲1->L23 擲1->L23 同狀態
    擲2->L3 根據投擲結果,或繼續期待L3,或已經達到目標
    擲3->L2 根據投擲結果,或繼續期待L2,或已經達到目標
  擲2->L13 擲1->L3 根據投擲結果,或繼續期待L3,或已經達到目標
    擲2->L13 同狀態
    擲3->L1 根據投擲結果,或繼續期待L1,或已經達到目標
  擲3->L12 擲1->L2 根據投擲結果,或繼續期待L2,或已經達到目標
    擲2->L1 根據投擲結果,或繼續期待L1,或已經達到目標
    擲3->L12 同狀態

接下來,就是要排出方程,因為一共7個未知數,如果排出7個線性方程就能解決問題。

這方程組里的未知數對應上述的狀態,而其數值則是一個對長度(投擲次數)的數學期望。

根據這個樹狀結構和其中的遞歸關系,這個方程組就是:

L123 = p1 (L23+ 1) + p2 (L13+1) + p3 (L12 + 1) = p1 L23 +p2 L13p3 L12 + 1

(以這個L123為例,解釋,投擲1的概率是p1而由此得到的結果是需要期待后續2和3各至少出現一次,於是長度期望是L23+ 1,加1是因為投擲了一次,亦即即增進一級)

L23 = p1 L23 +p2 L3p3 L2 + 1

L13 = p1 L3 +p2 L13p3 L1 + 1

L12 = p1 L2 +p2 L1p3 L12 + 1

L1 =p1 + p2 L1p3 L1 + 1

(這里實際上是 L1 =p1 ·1 + p2 (L1+1) + p3 (L1 +1) =p2 L1p3 L1 + 1,因為對L1情形,如果投了1就目的達到終止了)

L2 =p2 + p1 L2 +  p3 L2 + 1

L3 =p3 + p1 L3 +p2 L3+ 1

(以上一開始沒注意,多加了懸空的概率項,故計算有誤)

其中 p1,p2 和 p3分別是擲出1,2和3的概率,即1/6,1/3,1/2。

於是求解這個方程,得到:

L1 = 6, L2 = 3, L3 = 2

L12 = 7, L13 = 13/2, L23 = 19/56

L123 = 219/30 = 7.3 259/36 ~= 7.14

故以上如果沒有計算錯誤,該題結果是,平均擲7.3 約7.14次可出現這些面值各至少一次。

 

 ——————————————————————————————————————————————

(轉自:http://www.cnblogs.com/atyuwen/archive/2010/09/12/coin.html

問題:

一個骰子,6面,1個面是 1, 2個面是2, 3個面是3, 問平均擲多少次能使1,2,3都至少出現一次?

一共有三種方法可以解此問題:概率公式、分叉樹遞歸列方程法、指示器變量法。

1. 方法一:概率公式

化為概率的表示是:

1發生 的概率是1/6,  2發生的概率是2/6,  3發生的概率是3/6,求1,2,3至少出現一次的投擲次數的期望。

思路:

第一二次肯定不可能出現這種情況
第x(x > 2)次三個都出現的情況分三種(x ^ y 表示 x 的 y 次方)

1:第x次出現 1,那么前面出現的必然是 2 和 3 ,且至少出現一次   
   出現1的概率為 1 / 6,前面x-1次不出現1的概率為(1 - 1 / 6) ^ (x - 1),但是其中包含全是 2 和全是 3 的情況,去掉全 2 的概率 (1 / 2) ^ (x - 1),全部為3的概率(1 / 3) ^ (x - 1),那么情況 1 的概率為 ((1 - 1 / 6) ^ (x - 1) - (1 / 2) ^ (x - 1) - (1 / 3) ^ (x - 1)) * (1 / 6)

2:第x次出現2,那么前面出現的必然是 1 和 3 ,且至少出現一次
   同樣,概率為 ((1 - 1 / 3) ^ (x - 1) - (1 / 2) ^ (x - 1) - (1 / 6) ^ (x - 1)) * (1 / 3)

3:第x次出現3,那么前面出現的必然是 1 和 2 ,且至少出現一次
   同樣,概率為 ((1 - 1 / 2) ^ (x - 1) - (1 / 3) ^ (x - 1) - (1 / 6) ^ (x - 1)) * (1 / 2)

p(x)就為上面三種情況的和

那么,根據期望公式,平均值就等於從x = 3 到 n(無窮)求(x * p(x))的和

利用錯位相減法計算極限值

 

到此可以算出期望為7.3。

2. 方法二:分叉樹遞歸列方程法

 

方法: 面對面試概率題幾乎屢試不爽的分叉樹遞歸列方程法。

這是一個求數學期望的問題,最終是求1,2,3出現至少一次的最短長度的期望。

這樣分叉樹的每個節點是一個期望狀態,而每個分叉是一次投擲結果。將后續期望出現1、2、3各至少一次的情形記作L123(即題目所求),將后續期望出現1、2各至少一次(3無關)情形記作L12,而1至少一次(2,3無關)情形L1,其余數值符號類推,則樹結構如下(列出4級結構已經足夠):

 

第一級(樹根) 第二級 第三級 第四級別
L123 擲1->L23 擲1->L23 同狀態
    擲2->L3 根據投擲結果,或繼續期待L3,或已經達到目標
    擲3->L2 根據投擲結果,或繼續期待L2,或已經達到目標
  擲2->L13 擲1->L3 根據投擲結果,或繼續期待L3,或已經達到目標
    擲2->L13 同狀態
    擲3->L1 根據投擲結果,或繼續期待L1,或已經達到目標
  擲3->L12 擲1->L2 根據投擲結果,或繼續期待L2,或已經達到目標
    擲2->L1 根據投擲結果,或繼續期待L1,或已經達到目標
    擲3->L12 同狀態

 

 

接下來,就是要排出方程,因為一共7個未知數,如果排出7個線性方程就能解決問題。

這方程組里的未知數對應上述的狀態,而其數值則是一個對長度(投擲次數)的數學期望。

根據這個樹狀結構和其中的遞歸關系,這個方程組就是:

L123 = p1 (L23+ 1) + p2 (L13+1) + p3 (L12 + 1) = p1 L23 +p2 L13p3 L12 + 1

(以這個L123為例,解釋,投擲1的概率是p1而由此得到的結果是需要期待后續2和3各至少出現一次,於是長度期望是L23+ 1,加1是因為投擲了一次,亦即即增進一級)

L23 = p1 L23 +p2 L3p3 L2 + 1

L13 = p1 L3 +p2 L13p3 L1 + 1

L12 = p1 L2 +p2 L1p3 L12 + 1

L1 =p2 L1p3 L1 + 1

(這里實際上是 L1 =p1 ·1 + p2 (L1+1) + p3 (L1 +1) =p2 L1p3 L1 + 1,因為對L1情形,如果投了1就目的達到終止了)

L2 = p1 L2 + p3 L2 + 1

L3 = p1 L3 +p2 L3+ 1

其中p1,p2p3分別是擲出1,2和3的概率,即1/6,1/3,1/2。

於是求解這個方程,得到:

L1 = 6, L2 = 3, L3 = 2

L12 = 7, L13 = 13/2, L23 = 19/5

L123 = 219/30 = 7.3 

平均擲7.3 次可出現這些面值各至少一次。

3. 方法三:指示器變量法

【另一解法】感謝4樓aaaxingruiaaa同學提供的答案(指示器變量法),整理如下:

定義隨機變量Xn,其可能值為0或1,其值為1表示“前n次擲骰子,1,2,3沒能都至少出現一次”的事件,其值為0表示這個事件沒有發生,即“前n次擲骰子,1,2,3各至少出現一次”。

pn為“擲n次骰子,1,2,3沒能都至少出現一次”的概率,所以顯然pn = Pr{Xn=1},於是pn = 1·Pr{Xn=1} + 0·Pr{Xn=1} = E[Xn],即這個隨機變量的數學期望。

令隨機變量X表示1,2,3剛好全部出現過需要的投擲次數。可見題目要求的就是E[X]。

關鍵等式:X = Sigma(n=0 to Inf; Xn) (這里Sigma是求和號,求和范圍是n從0到無窮大)

說明一下,等式兩邊都是隨機變量,假設對於某個隨機實例(例如,這里指一次具體的投擲序列),其對應事件是:“投了K次恰好1,2,3都出現了”,於是等式左邊顯然等於K;而等式右邊,對於n < K,由於這些項的對應定義事件發生了(即1,2,3沒能出現),所以他們的實例值是1,而對於n⩾K,則由於對應定義事件都沒發生,實例值為0,可見這個和也是K。故兩側相等。(為了達到這個相等關系,可以看出需要把X0包含在內的必要性)

值得注意的是(但對於解這道題也可以不去注意,但注意一下有利於比較深入地理解),對n < 3,Xn顯然恆為1。而對於n⩾3,這些隨機變量不是獨立的。他們的相關性是不容易求出的,唯一容易知道的是,當序列中一個項為0時,其后的項均為0。好在對於這題我們不需要擔憂這個相關性。

由於數學期望的加性與隨機變量的相關性無關(這是數學期望一個很令人高興的性質),所以即便這樣,E[X]也能容易求出:

E[X] = Sigma(n=0 to Inf; E[Xn]) = Sigma(n=0 to Inf; pn)

pn的比較直觀的求法也由aaaxingruiaaa同學提供了,即所謂容斥原理。稍微解釋一下,由於pn考慮的是n次投擲三者沒有全部出現,於是就是其中兩者出現或僅一者出現。假設單次投擲1,2和3出現的概率分別為:r1r2和r3。於是(r1+r2)n表征n次投擲只出現1或2的概率,這其中包括了出現全1和全2的情形,於是求pn可由這樣的項求和並剔除重復計算的單面值情形,於是:

pn = (r1+r2)n+ (r1+r3)n+ (r2+r3)n-r1n-r2n-r3n,當n > 0; 而p0 = 1 (由定義;同時也可以檢驗看出,這個pn在n為1和2的時候都是1)

於是由等比級數(等比數列求和)公式:

E[X] = 1 + Sigma(n=1 to Inf; (r1+r2)n+ (r1+r3)n+ (r2+r3)n-r1n-r2n-r3n= 1 + (1 - r3) / r3 + (1 - r2) / r2 + (1 - r1) / r1r1 / (1 - r1) - r2 / (1 -r2) -r3 / (1 - r3) = 7.3

http://blog.csdn.net/quanben/article/details/6918209

 

假設有一個硬幣,拋出字(背面)和花(正面)的概率都是0.5,而且每次拋硬幣與前次結果無關。現在做一個游戲,連續地拋這個硬幣,直到連續出現兩次字為止,問平均要拋多少次才能結束游戲?注意,一旦連續拋出兩個“字”向上游戲就結束了,不用繼續拋。
上面這個題目我第一次見到是在pongba的TopLanguage的一次討論上,提出問題的人為Shuo Chen,當時我給出了一個解法,自認為已經相當簡單了,先來考慮一下拋硬幣的過程:首先先拋一枚硬幣,如果是花,那么需要重頭開始;如果是字,那么再拋一枚硬幣,新拋的這枚如果也是字,則游戲結束,如果是花,那么又需要重頭開始。根據這個過程,設拋硬幣的期望次數為T,可以得到關系:
  T = 1 + 0.5T + 0.5( 1 + 0.5 * 0 + 0.5T) 
解方程可得到 T = 6。

或者根據公式,需要連續拋出n個字的一般情形,結果相當簡潔:Tn = 2^(n+1) - 2,其中Tn為首次出現連續的n個字的期望投擲數。

公式證明如下:

方法一:

設出現連續k次正面的期望是a[k]
則出現連續k+1次正面的期望為a[k+1]
在出現連續k次正面后,有下面幾種情況:
i)下一個是正面,概率1/2,總次數a[k]+1;
ii)下一個是反面,概率1/2,則接下來平均仍需a[k+1],總次數a[k]+1+a[k+1]。
因此a[k+1]=(a[k]+1)/2+(a[k]+1+a[k+1])/2
整理得(a[k+1]+2)/(a[k]+2)=2
a[n]=(a[1]+2)*2^(n-1)-2
顯然a[1]=2;a[n]=2^(n+1)-2

方法二:

轉自matrix67  http://www.matrix67.com/blog/archives/3638

 

設想有這么一家賭場,賭場里只有一個游戲:猜正反。游戲規則很簡單,玩家下注 x 元錢,賭正面或者反面;然后庄家拋出硬幣,如果玩家猜錯了他就會輸掉這 x 元,如果玩家猜對了他將得到 2x 元的回報(也就是凈賺 x 元)。
讓我們假設每一回合開始之前,都會有一個新的玩家加入游戲,與仍然在場的玩家們一同賭博。每個玩家最初都只有 1 元錢,並且他們的策略也都是相同的:每回都把當前身上的所有錢都押在正面上。運氣好的話,從加入游戲開始,庄家拋擲出來的硬幣一直是正面,這個玩家就會一直贏錢;如果連續 n 次硬幣都是正面朝上,他將會贏得 2^n 元錢。這個 2^n 就是賭場老板的心理承受極限——一旦有人贏到了 2^n 元錢,賭場老板便會下令停止游戲,關閉賭場。讓我們來看看,在這場游戲中存在哪些有趣的結論。

首先,連續 n 次正面朝上的概率雖然很小,但確實是有可能發生的,因此總有一個時候賭場將被關閉。賭場關閉之時,唯一賺到錢的人就是賭場關閉前最后進來的那 n 個人。每個人都只花費了 1 元錢,但他們卻贏得了不同數量的錢。其中,最后進來的人贏回了 2 元,倒數第二進來的人贏回了 4 元,倒數第 n 進來的人則贏得了 2^n 元(他就是賭場關閉的原因),他們一共賺取了 2 + 4 + 8 + … + 2^n = 2^(n+1) - 2 元。其余所有人初始時的 1 元錢都打了水漂,因為沒有人挺過了倒數第 n + 1 輪游戲。
另外,由於這個游戲是一個完全公平的游戲,因此賭場的盈虧應該是平衡的。換句話說,有多少錢流出了賭場,就該有多少的錢流進賭場。既然賭場的錢最終被贏走了 2^(n+1) - 2 元,因此賭場的期望收入也就是 2^(n+1) - 2 元。而賭場收入的唯一來源是每人 1 元的初始賭金,這就表明游戲者的期望數量是 2^(n+1) - 2 個。換句話說,游戲平均進行了 2^(n+1) - 2 次。再換句話說,平均拋擲 2^(n+1) - 2 次硬幣才會出現 n 連正的情況。

——————————————————————————————————————————————————————

轉自 http://www.cnblogs.com/aquastone/archive/2012/10/19/Prob_CoinContinuousNPositive.html

1. 問題描述

連續拋一枚硬幣,連續出現若干次正面即停止,求所拋總次數的期望。

2. 求解期望

記硬幣出現正面的概率為p,停止條件中連續出現正面的次數為n,所拋總次數的期望為μn。考慮如下情形:首次出現連續n1次正面,此時所拋總次數的期望為μn1。再拋一次,結果有且只有一下兩種:

  • A. 出現正面,則滿足停止條件,所拋總次數的期望為μn1+1
  • B. 出現反面,則立即回到初始狀態,相當於從0開始再拋出n次連續正面,因此總次數的期望為μn1+1+μn。A、B兩種情況的概率分別為p,1p。因此有

 

μn=p(μn1+1)+(1p)(μn1+1+μn)(1)

 

 

μn=1p(μn1+1)(2)

 

展開,得通項公式

 

(3)

 

 

μn=s(1sn)1s,s=1p(4)

 

特別的,對於一枚均勻硬幣,p=1/2,因此μn=2n+12

3. 概率計算

進一步考慮該問題,嘗試求解連續拋出n次正面時,所拋總次數為m的概率P(n,m)。顯然,

 

P(n,m)=0m<nP(0,m)={10m=0m1

 

依然考慮第2節中的兩種情況。

  • 對於A,在首次連續出現n1次正面的情況下,再拋一次出現正面,滿足停止條件,因此需要前面總共拋了m1次,這一概率為P(n1,m1)
  • 對於B,設首次連續出現n1次正面時,已經拋了k次,再拋一次出現反面,立即回到初始狀態,因此,要滿足總次數為m,需要在后續的步驟里,恰好用mk1次拋出n次連續正面。因此B情況下的條件概率為kP(n1,k)P(n,mk1)

由全概率公式,得

 

P(n,m)=pP(n1,m1)+(1p)kP(n1,k)P(n,mk1)(5)

 

實際上,可以由P(n,m)的遞推式(5)得出μn的遞推式(2)。依據期望的定義

 

μn=mmP(n,m)=pmmP(n1,m1)+(1p)mkmP(n1,k)P(n,mk1)

 

第一項中的求和式可以寫成

 

m1(m1+1)P(n1,m1)=m1(m1)P(n1,m1)+m1P(n1,m1)=μn1+1

 

第二項中的求和式可以寫成

 

mk(k+1+mk1)P(n1,k)P(n,mk1)=kkP(n1,k)mP(n,mk1)+kP(n1,k)mP(n,mk1)+km(mk1)P(n1,k)P(n,mk1)=μn1+1+μn

 

可證。

4. 數值結果

根據P(n,m)的遞推式(5),寫出對應的Matlab程序如下。

復制代碼
N = 6;    % numbers of continuous positive in stop conditions
M = 3000; % total times when stop condition satisfied
p = 1/2;  % probability of positive

% Initial Conditions. P is a matrix in size of N+1,M+1 and the element 
% with index n+1,m+1 stands for P(n,m) because there are no index 0. P = zeros(N+1,M+1);
P(1,1) = 1;
% Iteration
for nn = 1:N
    for mm = 1:M
        tmp = 0;
        for kk = nn-1:mm-nn-1
             tmp = tmp + P(nn-1+1,kk+1)*P(nn+1,mm-kk-1+1);
        end
        P(nn+1,mm+1) = P(nn-1+1,mm-1+1)*p + tmp*(1-p);
    end
end
P=P(2:end,2:end)';  % get rid of P(0,m) & P(n,0)
semilogy(P); % no plot of P(0,m)
disp(['Check the sum of probability:']);
disp(sum(P));
disp(['Compute the expectation of total times:']);
disp((1:M)*P);
復制代碼

 為了產生直觀的印象,對p=1/2的情況計算前面幾項的結果。計算N=3,M=16,作出P(n,m)的半對數圖如下。

 

為了驗證mP(n,m)=1,以及根據此概率求期望mmP(n,m),將N,M增大至6,5000。程序輸出為

Check the sum of probability:
    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000

Compute the expectation of total times:
    2.0000    6.0000   14.0000   30.0000   62.0000  126.0000

顯然,驗證了概率之和為1。另外,容易驗證所求出的期望與μn的通項公式(4)給出的結果是一致的。

5. 模擬驗證

使用Mote Carlo模擬的方法對這一問題進行仿真,代碼如下

復制代碼
len = 2e8;   % length of random numbers
N = (1:6)';  % numbers of continuous positive in stop conditions

for pp = 1:length(N)
    res = rand(len,1)>0.5;    % uniform distribution, >0.5 stands for positive
    
    currTotalTime = 0; % total times when stop condition satisfied
    contPosCntr = 0;   % continuous positive appears
    numExper = 0;
    totalTimeRcd = nan(len,1);
    for ii = 1:len
        currTotalTime = currTotalTime+1;
        if (res(ii))
            contPosCntr = contPosCntr+1;
        else
            contPosCntr = 0;
        end

        if (contPosCntr>=N(pp))
            numExper = numExper+1;
            totalTimeRcd(numExper) = currTotalTime;
            contPosCntr = 0;
            currTotalTime = 0;
        end
    end

    meanT = mean(totalTimeRcd(1:numExper));
end
復制代碼

結果如下:

N=1: 2.000015
N=2: 6.000249
N=3: 14.001627
N=4: 29.985933
N=5: 62.000438
N=6: 126.052749

與理論結果一致。

6. 附注

該問題還有其他表現形式,如:

  • 有一個通關游戲,設每關所需的時間固定為1,而通關概率為p。如果某關失敗,則必須重新從第一關打起。問通關的平均時間。

這類問題本質上是一致的,都可以歸結為在一系列連續實驗中,首次連續出現n次成功的平均時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM