Nicky Cat 2022-06-18 11:21 采纳率: 100%
浏览 83
已结题

一个不断生长的概率问题

问题遇到的现象和发生背景

昨天,我老公突然说,他高中的时候想到一个问题,一直没有得到解答,念头不通达。
问题是这样的:
一个箱子里有100个白球,每次随机抓一个后放回,抓到白球涂成红色,抓到红球直接放回;
这样抓100次之后,再抓到红球的期望是多少?

我当时觉得这个用编程算挺容易的,就写了下面的代码:

问题相关代码,请勿粘贴截图
rm(list = ls())
x = c(1)
r = c(1)
all_p = numeric()

for (i in 1:15) {
  new_x = numeric()
  new_r = numeric()
  p = numeric()
  for (j in 1:length(x)) {

    y_1 = x[j]
    y_2 = x[j] + 1
    r_1 = r[j] * (x[j]/100)
    r_2 = r[j] * ((100 - x[j])/100)
    p_1 = r_1 * (y_1/100)
    p_2 = r_2 * (y_2/100)
    new_x = append(new_x, c(y_1, y_2))
    new_r = append(new_r, c(r_1, r_2))
    p = append(p, c(p_1, p_2))
  }

  x = new_x
  r = new_r
  p = sum(p)
  print(paste0("After ",(i + 1) , ' Times, E for red ball is ', round(p * 100, 2)))
  all_p = append(all_p, p)
}

plot(x = 1:length(all_p) + 1,
     y = all_p  * 100,
     type = 'b',
     xlab = 'Times',
     ylab = 'E for Red Ball')
运行结果及报错内容

虽然开始运行很顺畅,但越到后面算量越大。我的笔记本吃不下了。

我的解答思路和尝试过的方法

下面是我的测试:

[1] "After 2 Times, E for red ball is 1.99"
[1] "After 3 Times, E for red ball is 2.97"
[1] "After 4 Times, E for red ball is 3.94"
[1] "After 5 Times, E for red ball is 4.9"
[1] "After 6 Times, E for red ball is 5.85"
[1] "After 7 Times, E for red ball is 6.79"
[1] "After 8 Times, E for red ball is 7.73"
[1] "After 9 Times, E for red ball is 8.65"
[1] "After 10 Times, E for red ball is 9.56"
[1] "After 11 Times, E for red ball is 10.47"
[1] "After 12 Times, E for red ball is 11.36"
[1] "After 13 Times, E for red ball is 12.25"
[1] "After 14 Times, E for red ball is 13.13"
[1] "After 15 Times, E for red ball is 13.99"
[1] "After 16 Times, E for red ball is 14.85"

img

我想要达到的结果

求个道友把程序跑一下;
或者,除了这种直球的解法,还有没有什么好的方法?这答案不算出来,念头不通达,谢谢各位了!

  • 写回答

2条回答 默认 最新

  • 微笑精灵 2022-06-20 14:25
    关注

    为什么我算的是二分之一?从结果的角度来说只有两种结果,也就是二分之一。
    我们可以遍历所有结果。也就是2的101次方。
    但是无论怎么算,最后一个是红球的结果数量永远是总数的1/2
    #############
    好吧不闹了,实际上计算应该是。当最后一位固定为红色,此时我们有2的98次幂调数据链
    因为第一位必定是白色。
    此时我们遍历这些数组,将其反转过来实际上就是一个1开头的二进制数据我们从尾部开始遍历,因为结果已经固定所以我们可以很轻易的计算他的结果所带来的概率,也就是从倒数第二位算到第一位。
    这个时候我们就得到了结果集合,然后再用这个集合算概率。
    或者我们可以真正的算他的全结果概率。
    也就是1000的101次幂,其中最后一次和前面有重复的数量是多少。
    %%%%%%
    我跟我同事说了一下这个问题,现在他也自闭了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月26日
  • 已采纳回答 6月20日
  • 创建了问题 6月18日

悬赏问题

  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动