读书人

用rand5()失去rand7()

发布时间: 2012-07-30 16:19:05 作者: rapoo

用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.

理论上这种方法是理论无偏的,二楼的方法得到的随机数严格说来是有偏的,除非精度无限。

读书人网 >软件架构设计

热点推荐