我正在尝试设计一个随机数生成器,它会生成0-11的随机数。但我需要设计一下,考虑到我已经有一个随机数生成器,它会生成0-5的随机数。所有数字都来自0-应该以相同的概率生成11。
我经历了这个link
在链接中,使用的等式为5*foo() + foo() -5
,其中foo()
生成数字1-5(不是0-5)
1. For each value of first foo(), there can be 5 possible combinations for values of second foo(). So, there are total 25 combinations possible.
2. The range of values returned by the above equation is 1 to 25, each integer occurring exactly once.
3. If the value of the equation comes out to be less than 22, return modulo division by 7 followed by adding 1. Else, again call the method recursively. The probability of returning each integer thus becomes 1/7.
现在我可以将模数为12的函数更改为函数,如果数字超过24,则在上面链接中定义的函数中递归函数?如果没有那么我不明白错误。
或者我遇到了这个
让我们调用生成数字0-5的随机数生成器函数f(6)
。
(f(6)+f(6)+f(6))%12;
如果没有我可以减去哪种替代解决方案?我需要帮助来完成这项任务。也许我错过了一些东西。这里的抓点是0-11之间的每个数字应该具有相同的生成概率。除了f(6)
我不能使用任何其他功能。只能进行数学操作。
答案 0 :(得分:3)
有很多方法可以做到这一点,但在这种情况下我会选择:
f(6) + 6*f(2)
其中
f(2) = f(6)%2
概率是一致的,因为你有一个统一的概率来获得0到5之间的数字,以及将它转移到6-11间隔的统一概率。
答案 1 :(得分:1)
让我们调用你的0..5生成器g6()。如果你计算(6 * g6())+ g6(),那将给你一个统一的0..35。现在只差3,你就会有一个统一的0..11。