用rand5()得到rand7()
假设 rand5() 能均匀的产生 1-5 的随机数
问怎么用它写 rand7() (返回 1-7 的随机数)
看过一个解法说用 rand5() 产生 0-24 的随机数 然后再利用拒绝性采样(rejection sampling)得到 rand7
不知道为什么需要得到 0-24 的?
还有什么其他好方法?并请解释一下?
[解决办法]
本质就是5进制数跟7进制数的转换,把多余7的倍数的那部分除掉就可以了
[解决办法]
如果调用两次rand5, 这样会产生5 * 5 = 25中组合,编号为1~25,将其中7种标记为“好的”。
然后重复两次调用rand5,如果有好的出现,就找到了一个 rand7.
理论上这种方法是理论无偏的,二楼的方法得到的随机数严格说来是有偏的,除非精度无限。