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

拜特兰国王彩票决赛轮中先抽完特定颜色球的概率计算求助

拜特兰国王彩票决赛轮中先抽完特定颜色球的概率计算求助

问题描述

拜特兰国王彩票决赛轮的规则超简单:

  • 玩家从装着$a$个红球、$b$个绿球、$c$个蓝球的不透明袋子里抽球,抽完绝不放回
  • 一直抽,直到把某一种颜色的球全抽完为止——全抽完红球拿金奖,全抽完绿球拿银奖,剩下的情况拿铜奖
  • 给定$a$、$b$、$c$,得算出三种奖项的中奖概率

举两个实际例子:

  • 当$a=1,b=2,c=3$时,$P(金)=\frac{7}{12},P(银)=\frac{4}{15},P(铜)=\frac{3}{20}$
  • 当$a=1,b=1,c=1$时,三种奖项概率都是$\frac{1}{3}$

我的尝试

我折腾好几次了,一开始想的是把所有可能的抽球排列当成总结果数,用带重复的排列公式算出总共有$\frac{(a+b+c)!}{a!b!c!}$种排列,这个应该就是概率分数的分母没错。

但卡壳在分子上了——怎么算「红球先被抽完」的所有有效排列数啊?求大佬帮忙!


解决方案思路

别慌兄弟,咱们一步步拆解这个问题。你已经找对了分母的方向,分子的核心就是找所有「抽到最后一个红球时,绿球和蓝球都还剩至少1个」的抽球序列。

思路1:动态规划(最直观,容易手动/代码实现)

咱们可以用状态转移的思路来算概率,定义dp[i][j][k]表示当前袋子里还有i个红球、j个绿球、k个蓝球时,最终拿金奖的概率。状态转移规则很简单:

  • 如果i=0:说明红球已经全抽完了,直接拿金奖,所以dp[0][j][k] = 1
  • 如果j=0或者k=0:说明绿球/蓝球已经被抽完了,游戏结束拿不到金奖,所以dp[i][j][k] = 0
  • 其他情况:每次抽球有三种可能,分别对应抽红、绿、蓝,概率就是当前该颜色球数除以总球数,然后转移到对应的状态:
    $$
    dp[i][j][k] = \frac{i}{i+j+k} \times dp[i-1][j][k] + \frac{j}{i+j+k} \times dp[i][j-1][k] + \frac{k}{i+j+k} \times dp[i][j][k-1]
    $$

比如你给的例子a=1,b=2,c=3,咱们从dp[1][2][3]开始算:

  • dp[1][2][3] = (1/6)*dp[0][2][3] + (2/6)*dp[1][1][3] + (3/6)*dp[1][2][2]
  • 其中dp[0][2][3] = 1,然后再递归计算dp[1][1][3]dp[1][2][2],最后算出来结果就是7/12,和例子完全一致。

这个方法手动算小数值很清晰,写代码的话也容易实现,就是如果a/b/c很大的话可能需要优化空间,但一般场景下足够用了。

思路2:组合数学求和

如果你想用纯数学公式算,也可以。分子就是所有「抽到第a个红球时,绿球抽了x个(0≤x<b)、蓝球抽了y个(0≤y<c)」的序列数量。

每个这样的序列,前面有a-1个红球、x个绿球、y个蓝球,最后一个是红球,对应的排列数是$\binom{(a-1)+x+y}{a-1,x,y}$(也就是从a-1+x+y个位置里选a-1个放红球,x个放绿球,剩下的放蓝球)。

把所有x和y的情况加起来就是分子,除以总排列数$\frac{(a+b+c)!}{a!b!c!}$就是金奖概率:
$$
P(金) = \frac{\sum_{x=0}^{b-1} \sum_{y=0}^{c-1} \binom{a+x+y-1}{a-1,x,y}}{\binom{a+b+c}{a,b,c}}
$$

这个公式和动态规划的结果是等价的,本质上是把所有符合条件的序列数加起来再除以总数。

小技巧:互补验证

算完一种奖项的概率后,可以用1 - P(金) - P(银)来算铜奖概率,这样能验证结果对不对,避免计算错误。


备注:内容来源于stack exchange,提问作者Amir Alakbarli

火山引擎 最新活动