使用硬币翻转生成均匀随机数 0..n 的常用方法是以明显的方式为大于 n 的 2 的最小幂构建一个 rng,然后每当该算法生成大于 n-1 的数字时,抛出号码,然后再试一次。
不幸的是,这具有无穷大的最坏情况运行时间。
有没有办法在保证终止的同时解决这个问题?
使用硬币翻转生成均匀随机数 0..n 的常用方法是以明显的方式为大于 n 的 2 的最小幂构建一个 rng,然后每当该算法生成大于 n-1 的数字时,抛出号码,然后再试一次。
不幸的是,这具有无穷大的最坏情况运行时间。
有没有办法在保证终止的同时解决这个问题?
引用此答案https://stackoverflow.com/a/137809/261217:
没有(完全正确的)解决方案可以在恒定时间内运行,因为 1/7 是以 5 为底的无限小数。
现在问亚当罗森菲尔德为什么这是真的:)