产生随机树,从randk 产生 randn

主要使用方法是

Rejection sampling

描述如下:

1. 如果n <= k , 则调用randk,如果产生的随机数大于n,则将这个数拒绝,否则返回

2. 如果n >k, 则将n转换为k进制的数,然后根据n的位数产生几个随机数,将这个几个随机数作为n的不同位,联合起来作为产生的随机数,如果大于n,则拒绝,例如k=7,n = 10, 则n是2位数,调用rand7两次,将这两个随机数组装在一起,按7进制计算大小,如果大于10,则拒绝。

 

证明:由于每一位的数的概率相等,因此每个数的概率相等。例如对与10,是两位的7进制数,第一次调用rand7 产生高位为0,1的概率相等,第二次调用产生后面的数概率也相等,因此相等

你可能感兴趣的:(产生随机树,从randk 产生 randn)