Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 理解均匀随机数生成_Algorithm_Random - Fatal编程技术网

Algorithm 理解均匀随机数生成

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); //

我在读一个关于从rand5()生成rand7()的问题,但我似乎仍然不太理解它。建议的解决方案如下所示:

我理解这个方法,但我不明白为什么范围必须是1到21。我的解决办法是:

        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
有两种方法可以使2

  • (1-1)+2=2
  • (2-1)+1=2
有三种方法可以使3

  • (1-1)+3=3
  • (2-1)+2=3
  • (3-1)+1=3
有4种方法可以使4

  • (1-1)+4=4
  • (2-1)+3=4
  • (3-1)+2=4
  • (4-1)+1=4
有5种方法可以使你的5

  • (1-1)+5=5
  • (2-1)+4=5
  • (3-1)+3=5
  • (4-1)+2=5
  • (5-1)+1=5
有4种方法可以使6

  • (2-1)+5=6
  • (3-1)+4=6
  • (4-1)+3=6
  • (5-1)+2=6
有3种方法可以使7

  • (3-1)+5=7
  • (4-1)+4=7
  • (5-1)+3=7
有两种方法可以使8

  • (4-1)+5=8
  • (5-1)+4=8
有一种方法可以达到9

  • (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