【问题标题】:design a random(5) using random(7)使用 random(7) 设计一个 random(5)
【发布时间】:2017-06-27 09:09:44
【问题描述】:

给定一个随机数生成器 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怎么办?我知道机会非常小,但是有什么办法可以防止吗?

谢谢!

【问题讨论】:

  • 您可以将每个数字缩放一个常数因子 (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]。数字 35 平均出现的频率是其他数字的两倍。

标签: random probability


【解决方案1】:

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

X 成为随机数(7),然后对于{1,2,3,4,5} 中的任何k

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

这是因为观察到X = kX &lt;= 5 这两个事件的交集只是X = k

第一次成功之前的试验次数(成功是得到一个 p = 5/7。预期的试验次数为1/p = 7/5 = 1.4。在此设置中,您将尽快获得成功。正如@PeterWalser 在他的回答中所说,不能快速获得 1-5 范围内的数字的可能性微乎其微。

为了好玩,您可以编写一个简短的脚本来调查它。这是 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 次试验极为罕见。

【讨论】:

    【解决方案2】:

    每次掷出 n(1..5)rnd(7) 的概率为 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 分钟内吞噬地球的概率,因此没有必要建立一些预防措施。如果绝对必须,则在 n 次内部滚动后返回 1,这只会稍微扭曲生成的随机数的分布。

    【讨论】:

    • @helen 如果这些答案对您有所帮助,请考虑接受其中一个。他们俩都很好。
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多