当前位置: 首页 > 知识库问答 >
问题:

使用随机(7)设计随机(5)

陆甫
2023-03-14

给定一个随机数生成器random(7),它可以以相等的概率生成数字1,2,3,4,5,6,7(即每个数字出现的概率为1/7)。现在我们要设计一个随机数(5),它能以相等的概率(1/5)生成1,2,3,4,5。

有一种方法:每次我们随机运行(7),只有当它生成1-5时才返回。如果是6或7,再运行一次,直到它是1-5。

我有点困惑。第一个问题是:

如何用数学方法证明每个数字发生的概率是1/5?例如,假设返回数字1的概率为P(1)。如果B表示“所选数字在1-5中”,A表示“选择1”,则根据条件概率,P(1)=P(A | B)=P(AB)/P(B)。显然P(B)是5/7。但是如果P(1)=1/5,那么P(AB)应该是1/7,为什么?我认为P(A)=1/7。有什么不对吗?

第二个问题是,该方法将一直运行,直到random(7)不返回6或7为止。如果它运行了很长时间没有返回1-5呢?我知道机会很小,但有什么办法可以防止吗?

谢谢

共有2个答案

郏扬
2023-03-14

用rnd(7)滚动一个数字n(1...5)的概率是每滚动1/7。在第一次滚动中得到这样一个数字的机会是5/7,或者:在所有第一次滚动的情况下,有2/7,您需要再次滚动。

当检查某个数字n(1..5)被滚动的概率时,这会产生一系列结果:

p(n)=1/7 2/7 * (1/7 2/7 * (1/7 2/7 * (...)))

这个系列的计算结果为1/5,这是滚动特定数字n(1...5)的预期概率。

第二个问题:你有可能需要永远翻滚。有一个结果的概率是1-(2/7)^x,这很快接近1,所以你很有可能在几次掷骰中得到一个结果,但没有保证。在接下来的5分钟内,仍然无法产生大量滚动的概率比C'thulu吞没行星的概率要小,因此没有必要采取一些预防措施。如果绝对必须,则在n次内部滚动后返回1,这只会使生成的随机数的分布略有偏差。

国兴贤
2023-03-14

第一个问题的答案由基本条件概率给出:

X{1,2,3,4,5}中任意k的随机数(7):

P(X = k | X <= 5) = P(X = k)/P(X <= 5) = (1/7)/(5/7) = 1/5

这来自观察到2个事件X=kX的交集

直到第一次成功的试验次数(其中成功是获得一个数字

为了好玩,你可以写一个简短的脚本来研究它。在Python中有一个:

from random import randint
from collections import Counter

def trials_needed():
    num = randint(1,7)
    trial = 1
    while num > 5:
        num = randint(1,7)
        trial += 1
    return trial

counts = Counter(trials_needed() for i in range(10**6))
for c,i in counts.items(): print(c,":",i)

典型运行的输出:

1 : 714212
2 : 204141
3 : 58340
4 : 16515
5 : 4814
6 : 1456
7 : 347
8 : 133
9 : 28
10 : 10
11 : 4

99%以上的时间需要少于5次试验。超过10次的试验是极其罕见的。

 类似资料:
  • 问题内容: 有没有什么方法可以模拟Collections.shuffle的行为,而比较器不容易受到排序算法实现的影响,从而确保结果安全? 我的意思是不违反可比合同等。 问题答案: 不打破合同就不可能实现真正的“改组比较器”。合同的一个基本方面是,结果是可 重现的, 因此必须确定特定实例的顺序。 当然,您可以使用混洗操作预先初始化该固定顺序,并创建一个比较器来精确地建立此顺序。例如 虽然没有意义。显

  • 是否有任何方法可以模拟Collections.shuffle的行为,而比较器不容易受到排序算法实现的影响,以确保结果安全? 我的意思是不违反类似的合同等..

  • 配置 UserAgent 列表 @app.beans: [ 'UserAgentManager' => [ 'list' => [ // 这里可以放想要用的 UserAgent 列表 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36

  • 每次产生一个随机数。 用法 Your browser does not support the video tag. 案例:掷骰子 功能:设置随机数范围1-6,每按一下按钮,产生一个随机数 工作原理 当输入由no变为yes时,一个随机数将会被传送到输出。你可以通过配置改变随机数的范围 例如:一个随机变色的灯

  • 问题内容: 当他每次运行程序时都不断获得相同的数字时,我试图向Java解释随机数生成器。我为同一件事创建了自己的简单版本,每次运行该程序时,我也得到了与他得到的确切数字相同的数字。 我究竟做错了什么? 100个数字中的最后五个数字是: 问题答案: 您已经为随机数生成器提供了恒定的值。它是确定性的,因此每次运行都会生成相同的值。 我不确定您为什么选择使用作为种子,但是种子值与生成的值范围无关(这是由

  • 一个简单的新手问题,奇怪的是我一直没能找到解决方法。