设计一个随机数发生器

时间:2015-04-20 05:41:48

标签: random probability

我正在尝试设计一个随机数生成器,它会生成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)我不能使用任何其他功能。只能进行数学操作。

2 个答案:

答案 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。