You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

计算M次抛硬币中连续N次正面的概率及随机串事件对出现次数

关于抛硬币中连续正面概率与特定事件对计数的解答

嘿,这个问题问得很到位——普通二项分布只管「出现N次正面」的总数,但一旦加上「连续」这个限制,或者要统计特定成对事件的出现次数,思路就完全不一样了。我来给你一步步理清楚:

1. 计算M次抛硬币中连续出现N次正面的概率

首先明确:通常我们说的是「至少出现一次连续N次正面」的概率(如果是恰好出现一次,逻辑会更复杂)。这个问题没法直接用二项分布,得用递推法来算,因为每一次抛硬币的结果会影响后续的状态。

核心思路

定义两个概率:

  • P(m):m次抛硬币中至少出现一次连续N次正面的概率
  • Q(m) = 1 - P(m):m次抛硬币中从未出现连续N次正面的概率(先算这个更简单)

递推公式

  • m < N:次数不够,不可能出现连续N次正面,所以 Q(m) = 1P(m) = 0
  • m = N:只有全是正面才会触发连续N次,所以 Q(m) = 1 - (1/2)^NP(m) = (1/2)^N
  • m > N:要保证前m次没出现连续N次正面,最后一次的情况分两种:
    1. 最后一次是反面:那前m-1次也不能有连续N次正面,概率是 Q(m-1) * 1/2
    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ⁿ)
    

举个例子

比如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时)

初始状态

  • 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

火山引擎 最新活动