Random 使用随机(7)设计一个随机(5)

Random 使用随机(7)设计一个随机(5),random,probability,Random,Probability,给定一个随机数生成器random(7),它可以以相等的概率生成数字1,2,3,4,5,6,7(即每个数字出现的概率为1/7)。现在我们要设计一个随机数(5),它能以相等的概率(1/5)生成1,2,3,4,5 有一种方法:每次运行random(7),只有当它生成1-5时才返回。如果为6或7,则再次运行,直到为1-5 我有点困惑。第一个问题是: 如何用数学方法证明每个数字发生的概率是1/5? 例如,假设返回数字1的概率为P(1)。如果B表示“所选数字在1-5中”,A表示“选择1”,则根据条件概率,P

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

有一种方法:每次运行random(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)的预期概率


第二个问题:有一个机会,你需要永远滚动。在x个掷骰中产生结果的概率为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
典型运行的输出:

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次的试验是极其罕见的

您可以按常量因子(5/7)缩放每个数字,然后四舍五入,得到1-5之间的最终结果。@Coldspeed这会有偏差。@JohnColeman我相信您是对的。它是否向左倾斜均匀分布?@Coldspeed
[math.ceil(i*5/7)for i in range(1,8)]
的计算结果为
[1,2,3,3,4,5,5]
。数字<代码> 3 和<代码> 5 > /代码>平均每一次出现的次数是其他数字的两倍。@海伦,如果这些答案帮助了你,考虑接受其中一个。他们都很好。
1 : 714212
2 : 204141
3 : 58340
4 : 16515
5 : 4814
6 : 1456
7 : 347
8 : 133
9 : 28
10 : 10
11 : 4