给定一个随机数生成器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呢?我知道机会很小,但有什么办法可以防止吗?
谢谢
用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,这只会使生成的随机数的分布略有偏差。
第一个问题的答案由基本条件概率给出:
设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=k
和X的交集
直到第一次成功的试验次数(其中成功是获得一个数字
为了好玩,你可以写一个简短的脚本来研究它。在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个数字中的最后五个数字是: 问题答案: 您已经为随机数生成器提供了恒定的值。它是确定性的,因此每次运行都会生成相同的值。 我不确定您为什么选择使用作为种子,但是种子值与生成的值范围无关(这是由
一个简单的新手问题,奇怪的是我一直没能找到解决方法。