设计一个随机数发生器
Designing a random number generator
我正在尝试设计一个从 0-11.But 生成随机数的随机数生成器我需要设计考虑到我已经有一个从 0-[=32= 生成随机数的随机数生成器] 0-11的数字应该等概率生成。
我经历了这个link
在 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.
现在我可以在上面 link 中定义的函数中更改以 12 为模的函数并在数字超过 24 时递归该函数吗?如果不是,那么我不明白什么是错了。
或者我遇到了这个
让我们调用生成数字 0-5 的随机数生成器函数 f(6)
。
(f(6)+f(6)+f(6))%12;
如果不是,我可以扣除什么替代解决方案?我需要帮助才能做到这一点 task.Maybe 我错过了 something.The 这里要注意的是 0-11 之间的每个数字应该具有相等的概率 generation.Other 比 f(6)
我不能使用任何其他 function.Only 数学运算。
有很多方法可以做到这一点,但在这种情况下我会选择:
f(6) + 6*f(2)
其中
f(2) = f(6)%2
概率是均匀的,因为你有一个均匀的概率得到一个从0到5的数字,并且有一个均匀的概率将它移到6-11区间。
我们将您的 0..5 生成器称为 g6()。如果你计算 (6 * g6()) + g6(),那会给你一个统一的 0..35。现在只要除以 3,你就会得到统一的 0..11.
我正在尝试设计一个从 0-11.But 生成随机数的随机数生成器我需要设计考虑到我已经有一个从 0-[=32= 生成随机数的随机数生成器] 0-11的数字应该等概率生成。
我经历了这个link
在 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.
现在我可以在上面 link 中定义的函数中更改以 12 为模的函数并在数字超过 24 时递归该函数吗?如果不是,那么我不明白什么是错了。
或者我遇到了这个
让我们调用生成数字 0-5 的随机数生成器函数 f(6)
。
(f(6)+f(6)+f(6))%12;
如果不是,我可以扣除什么替代解决方案?我需要帮助才能做到这一点 task.Maybe 我错过了 something.The 这里要注意的是 0-11 之间的每个数字应该具有相等的概率 generation.Other 比 f(6)
我不能使用任何其他 function.Only 数学运算。
有很多方法可以做到这一点,但在这种情况下我会选择:
f(6) + 6*f(2)
其中
f(2) = f(6)%2
概率是均匀的,因为你有一个均匀的概率得到一个从0到5的数字,并且有一个均匀的概率将它移到6-11区间。
我们将您的 0..5 生成器称为 g6()。如果你计算 (6 * g6()) + g6(),那会给你一个统一的 0..35。现在只要除以 3,你就会得到统一的 0..11.