【发布时间】:2012-01-31 08:16:20
【问题描述】:
可能重复:
how to get uniformed random between a, b by a known uniformed random function RANDOM(0,1)
在算法简介一书中,有一个消费税:
描述仅调用 Random(0,1) 的过程 Random(a, b) 的实现。作为 a 和 b 的函数,您的程序的预期运行时间是多少? Random(a,b)的结果概率应该是纯均匀分布的,如Random(0,1)
对于 Random 函数,结果是 a 和 b 之间的整数,包括。例如,Random(0,1) 生成 0 或 1; Random(a, b) 生成 a, a+1, a+2, ..., b
我的解决办法是这样的:
for i = 1 to b-a
r = a + Random(0,1)
return r
运行时间为T=b-a
这是正确的吗?我的解决方案的结果是否均匀分布?
谢谢
如果我的新解决方案是这样的:
r = a
for i = 1 to b - a //including b-a
r += Random(0,1)
return r
如果不正确,为什么 r += Random(0,1) 使得 r 不均匀分布?
【问题讨论】:
-
您的解决方案不是均匀分布的。例如,最低值
a只能通过 random(0)+random(0)+random(0)+...之和来“计算”。但是“中间”值的概率是更高,因为它可以计算为 0+0+0+1+1、0+0+1+0+1、1+1+0+0+0,以此类推。把它想象成扔两个骰子。得到2(1+1)或12(6+6)的概率低于得到7(1+6,2+5,3+4,4+3,5+2,6+1)的概率(卡坦英尺的定居者。;))。 -
您的第二行每次都会重置
r。您应该将其初始化为a,然后在循环中根据自身进行更新。
标签: algorithm random probability