在算法简介一书中,有一个消息:
描述只调用Random(0,1)的过程Random(a,b)的实现.作为a和b的函数,您的程序的预期运行时间是多少?随机(a,b)结果的概率应该是纯粹均匀分布的,如随机(0,1)
对于Random函数,结果是a和b之间的整数,包括在内.例如,Random(0,1)生成0或1; 随机(a,b)生成a,a + 1,a + 2,...,b
我的解决方案是这样的:
for i = 1 to b-a
r = a + Random(0,1)
return r
Run Code Online (Sandbox Code Playgroud)
运行时间为T = ba
它是否正确?我的解决方案的结果是否均匀分布?
谢谢
如果我的新解决方案如下所示:
r = a
for i = 1 to b - a //including b-a
r += Random(0,1)
return r
Run Code Online (Sandbox Code Playgroud)
如果不正确,为什么r + = Random(0,1)使r不均匀分布?
问题:假设您有一个随机数生成器randn(),它返回0到n-1之间的均匀分布的随机数.给定任意数m,写一个随机数生成器,返回0到m-1之间的均匀分布的随机数.
我的答案:
-(int)randm() {
int k=1;
while (k*n < m) {
++k;
}
int x = 0;
for (int i=0; i<k; ++i) {
x += randn();
}
if (x < m) {
return x;
} else {
return randm();
}
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?