【发布时间】:2015-06-26 17:09:31
【问题描述】:
我正在尝试设计一个从 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 时递归该函数吗?如果不是,那么我不明白出了什么问题。
另外,我遇到了这个
让我们调用随机数生成器函数f(6) 生成数字0-5。
(f(6)+f(6)+f(6))%12;
如果不是我可以扣除什么替代解决方案?我需要帮助来完成这项任务。也许我错过了一些东西。这里的问题是 0-11 之间的每个数字应该具有相同的生成概率。除了f(6) 我不能使用任何其他函数。仅使用数学运算。
【问题讨论】:
-
欢迎来到 SO:SE。请阅读How to Ask。您的帖子应该在两个方面进行改进:在您的帖子中包含链接的资源相关部分(以防资源被移动或删除),并提供您当前尝试的代码。祝你好运!
-
这样好吗?我不需要代码,我已经提供了我尝试过的内容...尽力而为,但我仍然认为我错过了一些东西。
-
你在做什么听起来很合理,但我会把它留给能够证明它的人。我生疏了,我上过的课都是不久前的事了。
-
提示:给定你的函数,你将如何以相等的概率生成 0 到 35 之间的数字(所以 36 种不同的可能性)?尝试从您的第一个链接调整方程式。 (
(f(6) + f(6) + f(6)) %12不是你想要的:它不会给你一个统一的分布。) -
@Ayush:接近,但不完全。请注意,只需 两次 调用
f(6),您已经获得了 6 * 6 = 36 种可能的不同结果(并且方便的是,36 是 12 的倍数)。现在你只需要找到一种方法将这些不同的结果映射到你想要的。
标签: random probability