使用硬币翻转生成均匀随机数0..n的常用方法是以明显的方式构建一个大于n的最小幂的rng,然后每当此算法生成大于n-1的数时扔掉那个号码然后再试一次。
不幸的是,这是无穷大的最坏情况运行时。
在保证终止时有没有办法解决这个问题?
答案 0 :(得分:2)
引用此答案https://stackoverflow.com/a/137809/261217:
没有(完全正确的)解决方案将以常量运行 时间量,因为1/7是基数5中的无限小数。
现在问Adam Rosenfield为什么这是真的:)