【问题标题】:generate rand(9) using rand(3)使用 rand(3) 生成随机数(9)
【发布时间】:2012-08-12 04:14:22
【问题描述】:

你有一个函数 rand(3),它生成从 1 到 3 的随机整数。使用这个函数,构造另一个函数 rand(9),它生成从 1 到 9 的随机整数。

【问题讨论】:

  • 这是你大学书的题目吗?
  • rand(3) + rand(3) + rand(3)?
  • @Shubham 这将如何产生 1 的结果?
  • @Shubham: rand(3)[1,3] 区间内生成整数,因此将其中三个相加会得到[3,9] 中的整数,而不是[1,9]
  • 啊,错过了。这些是那些看似简单但如果仔细分析就会发现的问题之一。

标签: random probability


【解决方案1】:

这是一个简单的解决方案:

rand(3) + 3*(rand(3) - 1)

您想要这样做的原因是它提供了从 1 到 9 的所有可能值的均匀分布。

有些人可能只想做rand(3) * rand(3),但这实际上并不会产生一些数字——例如7。它还会不均匀地分布它确实生成的数字。

同样,有些人可能会使用rand(3) + rand(3) + rand(3),但这也不会生成所有数字(它永远不会生成 1 或 2),并且会以不成比例的频率生成其他数字(生成 5 的频率远高于9).

【讨论】:

  • 你有证据证明你的解决方案是均匀分布的吗?
  • @Dani 它将输出空间分成 3 个大小相等的块(后半部分就是这样做的),然后从其中一个块中平均选取一个元素(前半部分就是这样)有一半)。每个方块有 1/3 的机会被选中,每个方块中的每个项目都有 1/3 的机会被选中,因此每个项目总体上有 1/9 的机会被选中。
【解决方案2】:

使用 rand(3) 两次,可以生成 3^2 对整数,即 (1,1), (1,2), ..., (3,3)。将每一对分配给值 [1,9] 之一(例如,将 (1,1) 分配给 1,将 (1,2) 分配给 2 等)将为您提供 rand(9)。象征性地:rand(9):=(rand(3),rand(3))。

【讨论】:

  • 这是真的,但使用 Amber 建议的 base-3 分解是一个更完整的答案。
猜你喜欢
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
相关资源
最近更新 更多