【问题标题】:Designing a random number generator设计一个随机数生成器
【发布时间】: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


【解决方案1】:

有很多方法可以做到这一点,但在这种情况下,我会选择:

f(6) + 6*f(2)

在哪里

f(2) = f(6)%2

概率是统一的,因为你有统一的概率得到一个从 0 到 5 的数字,也有统一的概率将它移到 6-11 区间。

【讨论】:

    【解决方案2】:

    我们将您的 0..5 生成器称为 g6()。如果你计算 (6 * g6()) + g6(),那会给你一个统一的 0..35。现在只需除以 3,您将得到一个统一的 0..11。

    【讨论】:

      猜你喜欢
      • 2023-01-03
      • 2011-09-18
      • 1970-01-01
      • 2018-04-21
      • 2011-02-08
      • 1970-01-01
      • 2019-12-15
      相关资源
      最近更新 更多