计算M次抛硬币中连续N次正面的概率及随机串事件对出现次数
关于抛硬币中连续正面概率与特定事件对计数的解答
嘿,这个问题问得很到位——普通二项分布只管「出现N次正面」的总数,但一旦加上「连续」这个限制,或者要统计特定成对事件的出现次数,思路就完全不一样了。我来给你一步步理清楚:
1. 计算M次抛硬币中连续出现N次正面的概率
首先明确:通常我们说的是「至少出现一次连续N次正面」的概率(如果是恰好出现一次,逻辑会更复杂)。这个问题没法直接用二项分布,得用递推法来算,因为每一次抛硬币的结果会影响后续的状态。
核心思路
定义两个概率:
P(m):m次抛硬币中至少出现一次连续N次正面的概率Q(m) = 1 - P(m):m次抛硬币中从未出现连续N次正面的概率(先算这个更简单)
递推公式
- 当
m < N:次数不够,不可能出现连续N次正面,所以Q(m) = 1,P(m) = 0 - 当
m = N:只有全是正面才会触发连续N次,所以Q(m) = 1 - (1/2)^N,P(m) = (1/2)^N - 当
m > N:要保证前m次没出现连续N次正面,最后一次的情况分两种:- 最后一次是反面:那前m-1次也不能有连续N次正面,概率是
Q(m-1) * 1/2 - 最后一次是正面,但倒数第k次(k从1到N-1)是反面,且前m-k-1次也没有连续N次正面
把这些情况加起来,递推式为:
Q(m) = Q(m-1)*(1/2) + Q(m-2)*(1/2²) + ... + Q(m-N)*(1/2ⁿ) - 最后一次是反面:那前m-1次也不能有连续N次正面,概率是
举个例子
比如N=2(连续2次正面),M=3:
- Q(1)=1,Q(2)=1 - (1/2)²=3/4
- Q(3)=Q(2)(1/2) + Q(1)(1/2²) = 3/41/2 + 11/4 = 5/8
- P(3)=1 - 5/8=3/8,对应实际情况:HHH、HHT、THH这3种,概率确实是3/8,完全正确。
如果是「恰好出现一次连续N次正面」,需要用容斥原理或更精细的动态规划(要排除多次连续的情况),这里就不展开了,有需要可以再深入聊。
2. 随机字符串中特定事件对(如‘HH’)的出现次数
这里的随机字符串是指由H/T组成的长度为M的序列,每个字符独立,概率各为1/2。我们分两种情况讨论:
情况1:计算期望出现次数
这个很简单,用线性期望就能搞定,不用考虑事件之间的相关性。
- 定义指示变量
X_i:如果第i和i+1位是HH,X_i=1,否则X_i=0(i从1到M-1) - 总出现次数
X = X₁ + X₂ + ... + X_{M-1} - 每个
X_i的期望E[X_i] = P(第i和i+1位都是H) = 1/2 * 1/2 = 1/4 - 总期望
E[X] = (M-1)*1/4
比如M=3,期望是(3-1)/4=0.5,实际验证:HHH出现2次HH,HHT、THH各出现1次,其余5种出现0次,总期望是(2+1+1)/8=0.5,完全吻合。
情况2:计算出现k次的概率
这个需要用动态规划来追踪状态,因为当前的字符会影响下一次是否形成HH。
定义状态 dp[m][k][s]:
m:当前字符串长度k:已经出现的HH次数s:最后一个字符(0代表T,1代表H)
状态转移
- 添加T时:不管前一个字符是什么,都不会新增HH,所以
dp[m][k][0] = dp[m-1][k][0] * 1/2 + dp[m-1][k][1] * 1/2 - 添加H时:
- 如果前一个字符是T(s=0),不会新增HH:
dp[m][k][1] += dp[m-1][k][0] * 1/2 - 如果前一个字符是H(s=1),会新增1次HH:
dp[m][k][1] += dp[m-1][k-1][1] * 1/2(k≥1时)
- 如果前一个字符是T(s=0),不会新增HH:
初始状态
dp[1][0][0] = 1/2(第一次抛T)dp[1][0][1] = 1/2(第一次抛H)- 其他
dp[1][k][s] = 0
最终概率
出现k次HH的总概率为:
P(X=k) = dp[M][k][0] + dp[M][k][1]
举个例子
还是M=3,k=1:
dp[3][1][0] = dp[2][1][0]*1/2 + dp[2][1][1]*1/2 = 0 + (1/4)*1/2 = 1/8(对应HHT)dp[3][1][1] = dp[2][0][0]*1/2 + dp[2][0][1]*1/2 = (1/4)*1/2 + (1/4)*1/2 = 1/8(对应THH)P(X=1) = 1/8 + 1/8 = 1/4,和实际情况一致。
内容的提问来源于stack exchange,提问作者Vinícius Godim




