【问题标题】:Generate random number from 0 to n using a boolean random number generator [duplicate]使用布尔随机数生成器生成从 0 到 n 的随机数
【发布时间】:2014-10-17 07:55:47
【问题描述】:

给定一个布尔随机数生成器。如何使用它生成 0 到 n 范围内的随机数。

【问题讨论】:

  • 定义“布尔随机数生成器”
  • 生成一个介于 0 和二次幂之间的随机数,该随机数至少为 n,并在结果至少为 n 时重试。
  • @alfasin 一个“布尔随机数生成器”已经定义好了。
  • @kayson 然后链接将不胜感激!
  • Booleannumber 是两种不同的类型。同样,您能否提供一个提供定义的链接/参考?说“介绍性编程教科书”是一种挥别。要么提供支持你奇怪定义的参考资料(对这样的教科书),要么承认你错了。

标签: algorithm random data-structures


【解决方案1】:

一个接一个地设置数字的位。假设您使用发电机 10 次。这将给你 10 次在每一轮中获得“0”或“1”的机会。您现在将生成一个介于 0 到 1023 之间的随机数。

要获得从 0 到 n 的随机数,您需要使用生成器 lg(n) 次(lg = log base 2)。

【讨论】:

  • 如果生成一个介于 0 和 987 之间的随机数(其中 n 不是 2 的幂)怎么办?它是否保留了随机属性只是截断了更大的生成范围?
  • @user2864740 最后一句话回答了这个问题,它很丑但应该可以。但不确定结果的分布。
  • 然后取log后数字的上限。如果数字大于 987,则拒绝结果。这并不能保证生成结果,但如果确实生成,则从 0 到 987 的数字的概率是偶数。
  • 如果有人想知道,预计生成的所需数字最多为 2 个。
猜你喜欢
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2023-01-03
相关资源
最近更新 更多