【问题标题】:Generate a random number using coin flips while guarenteeing termination在保证终止的同时使用硬币翻转生成一个随机数
【发布时间】:2014-01-27 13:45:02
【问题描述】:

使用硬币翻转生成均匀随机数 0..n 的常用方法是为大于 n 的 2 的最小幂构建一个 rng,然后每当该算法生成大于 n-1 的数字时,扔掉那个号码,然后再试一次。

不幸的是,这具有无穷大的最坏情况运行时间。

有没有办法在保证终止的同时解决这个问题?

【问题讨论】:

  • 显然,n 可以写成 sum 2^p1 + 2^p2 + ...(假设有 q 个项)。然后你可以为前一个总和的每一项生成q个随机数,并将它们相加生成你搜索到的随机数。
  • 看看stackoverflow.com/a/891304/916657 你可以以大量内存为代价实现你想要的。我宁愿使用常量内存方法,它在运行时实际上是有界的,因为它越来越不可能长时间运行。
  • @wxyz 这不是均匀分布,你不能指定范围。
  • @wxyz AND 均匀分布的随机变量的总和不是均匀分布的!
  • "不幸的是,这具有无穷大的最坏情况运行时间。" 是的,出现最坏情况的概率为零(0)。

标签: algorithm random probability random-sample coin-flipping


【解决方案1】:

引用这个答案https://stackoverflow.com/a/137809/261217

没有(完全正确的)解决方案可以持续运行 时间量,因为 1/7 是以 5 为底的无限小数。

现在问Adam Rosenfield为什么是真的:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2015-10-16
    • 2012-05-11
    • 1970-01-01
    • 2012-10-23
    相关资源
    最近更新 更多