量化面试——袋子抽球

北单实体店微信:LYZZ336688 2024-02-01 10:27

问题:

一个袋子有白球5个,蓝球8个,

(1)抽一个看其颜色扔掉;

(2)继续抽,若跟上次不同放入袋中,继续(1);若相同扔掉,继续(2);

问最后一个白球概率

---------------------------我是罪恶的分割线---------------------

其实可以用递推,先从简单开始,设f(x,y)表示x个白球y个蓝球的时候最后一个是白球的概率。我们知道,如果连续两个颜色相反,则可以用递推了。

我们知道,由于对称性,

f(x,y)+f(y,x)=1\\

f(x,0)=1,f(0,y)=0,这是显然的;

另外,设g(x,y)是上次抽到白球时最后一个是白球的概率,则有

g(x,y)=\frac{x}{x+y}g(x-1,y)+\frac{y}{x+y}f(x,y)\\

双色球蓝球中奖绝技_蓝球_蓝球火

h(x,y)是上次抽到蓝球时最后一个是白球的概率,则有:

h(x,y)=\frac{x}{x+y}f(x,y)+\frac{y}{x+y}h(x,y-1)\\

我们有:

h(x,y)+g(y,x)=h(y,x)+g(x,y)=1\\

\begin{equation} \begin{split} f(x,y)&=\frac{x}{x+y}g(x-1,y)+\frac{y}{x+y}h(x,y-1)\\ &=\frac{x}{x+y}g(x-1,y)+\frac{y}{x+y}(1-g(y-1,x)) \end{split} \end{equation}

我们可以模拟一下:

n <- 8
m <- 8
f <- matrix(NA, nrow=n, ncol=m)
g <- matrix(NA, nrow=n, ncol=m)
for (i in 1:m)
  f[1,i] <- 1/(i+1)
for (i in 1:n)
  f[i,1] <- i/(i+1)
for (i in 1:m)
  g[1,i] <- i/(i+1)*f[1,i]
g[1,1]=1/4
for (i in 2:n)
  g[i,1] <- i/(i+1) *g[i-1,1]+1/(i+1)*f[i,1]
for (x in 2:n) {
  for (y in 2:x) {
    if (is.na(g[x-1,y]) || is.na(g[y-1,x])) 
      stop("Error!")
    f[x,y] = x/(x+y)*g[x-1,y]+y/(x+y)*(1-g[y-1,x])
    if (y<=n && x<=m) f[y,x] = 1-f[x,y]
    g[x,y] = x/(x+y)*g[x-1,y]+y/(x+y)*f[x,y]
    if (y<=n && x<=m) g[y,x] = y/(x+y)*g[y-1,x]+x/(x+y)*f[y,x]
  }
}

结果为:

中间为了防止计算出错所以有个输出错误信息的。结果表示没有出错。然后我们需要看的是(5,8)这一个数:

f[5,8]=0.4743748

之前算错了,谢谢网友指正

下一篇: 中华五千年“足球史” 唐朝“女足”比“男足”厉害
上一篇: 足球为什么这么受欢迎?
相关文章
返回顶部小火箭