如何从生成0/1的随机数生成器构建随机数生成器

时间:2017-12-15 19:46:17

标签: algorithm random

随机数生成器以相等的概率生成0或1

如何创建另一个可以生成0到N之间任意整数的随机数生成器

2 个答案:

答案 0 :(得分:2)

很容易生成0到2 ^ k - 1范围内的随机数。 当n不是2的幂时,你可以找到n <1的最小k。 2 ^ k,并重复生成0到2 ^ k - 1范围内的随机数,直到你得到一个实际上是&lt; ñ。在获得命中之前预期的试验次数小于2(因为选择k是最小的,命中的概率是> 0.5)所以这在实践中将是相当有效的。一个Python实现来充实这些想法:

from random import randint
from math import ceil,log

#a test function to generate random bits:
def rand2(): return randint(0,1)

def rand2n(n):
     #returns a random int in range 0 to 2^n - 1
     p = 1
     s = 0
     for i in range(n):
          if rand2() == 1:s += p
          p *= 2
     return s

def randn(n):
     #returns random int in range 0,...,n-1
     k = ceil(log(n,2))
     while True:
          x = rand2n(k)
          if x < n:
               return x #else, loop

答案 1 :(得分:0)

将N转换为二进制。获取位数(比如n)。现在使用您拥有的生成器生成n位随机位。然后将新数字转换为十进制并除以N.您将得到介于0到N之间的东西。