【发布时间】: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]。数字3和5平均出现的频率是其他数字的两倍。
标签: random probability