Algorithm 理解均匀随机数生成
我在读一个关于从rand5()生成rand7()的问题,但我似乎仍然不太理解它。建议的解决方案如下所示: 我理解这个方法,但我不明白为什么范围必须是1到21。我的解决办法是:Algorithm 理解均匀随机数生成,algorithm,random,Algorithm,Random,我在读一个关于从rand5()生成rand7()的问题,但我似乎仍然不太理解它。建议的解决方案如下所示: 我理解这个方法,但我不明白为什么范围必须是1到21。我的解决办法是: int i; do { i = (rand5()-1) + rand5(); // i is now uniformly random between 1 and 9 } while(i > 7); //
int i;
do
{
i = (rand5()-1) + rand5(); // i is now uniformly random between 1 and 9
} while(i > 7);
// i is now uniformly random between 0 and 6
return i+1;
我无法说服自己上述方法不起作用。你们能给我举一个数字的例子吗,这些数字看起来比其他数字都多,这使得我的方法不一致?为什么需要5的乘数
你们能给我举一个数字的例子吗,这些数字看起来比其他数字都多,这使得我的方法不一致
当然可以。使用您的方法,接近范围中间的数字比末尾的数字更可能出现;例如,5出现的可能性是1的5倍
有一种方法可以使1
- (1-1)+1=1
- (1-1)+2=2
- (2-1)+1=2
- (1-1)+3=3
- (2-1)+2=3
- (3-1)+1=3
- (1-1)+4=4
- (2-1)+3=4
- (3-1)+2=4
- (4-1)+1=4
- (1-1)+5=5
- (2-1)+4=5
- (3-1)+3=5
- (4-1)+2=5
- (5-1)+1=5
- (2-1)+5=6
- (3-1)+4=6
- (4-1)+3=6
- (5-1)+2=6
- (3-1)+5=7
- (4-1)+4=7
- (5-1)+3=7
- (4-1)+5=8
- (5-1)+4=8
- (5-1)+5=9
1 2 3 4 5
---------------
1 | 1 2 3 4 5
2 | 2 3 4 5 6
3 | 3 4 5 6 7
4 | 4 5 6 7 8
5 | 5 6 7 8 9
数一数表中的5,然后数一数1和9。问题应该是显而易见的
通过将一个随机数乘以范围并加上第二个随机数,可以使每个随机数的贡献保持独立。总共有25种不同的结果,每种结果的概率为1/25。“我现在在1和9之间是均匀随机的”。我认为那不是真的。有两种方法可以生成2(1-1+2或2-1+1),但只有一种方法可以生成1(1-1+1)。回答得好。我现在相信了。
1 2 3 4 5
---------------
1 | 1 2 3 4 5
2 | 2 3 4 5 6
3 | 3 4 5 6 7
4 | 4 5 6 7 8
5 | 5 6 7 8 9