Algorithm 在保证终止的情况下,使用抛硬币生成一个随机数

Algorithm 在保证终止的情况下,使用抛硬币生成一个随机数,algorithm,random,probability,random-sample,coin-flipping,Algorithm,Random,Probability,Random Sample,Coin Flipping,使用抛硬币生成均匀随机数0..n的常用方法是以明显的方式为大于n的最小二次方构建rng,然后每当此算法生成大于n-1的数字时,扔掉该数字并重试 不幸的是,这有无限的最坏运行时间 在保证终止合同的同时,有没有办法解决这个问题?引用这个答案: 没有(完全正确的)解决方案将以常量运行 时间量,因为1/7是以5为基数的无限小数 现在问问为什么它是真的:)显然,n可以写成和2^p1+2^p2+。。。(比如说,它有q项)。然后,您可以为上一个和的每个项生成q个随机数,并将它们相加以生成搜索到的随机数。看看您

使用抛硬币生成均匀随机数0..n的常用方法是以明显的方式为大于n的最小二次方构建rng,然后每当此算法生成大于n-1的数字时,扔掉该数字并重试

不幸的是,这有无限的最坏运行时间

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

引用这个答案:

没有(完全正确的)解决方案将以常量运行 时间量,因为1/7是以5为基数的无限小数


现在问问为什么它是真的:)

显然,n可以写成和2^p1+2^p2+。。。(比如说,它有q项)。然后,您可以为上一个和的每个项生成q个随机数,并将它们相加以生成搜索到的随机数。看看您是否可以以大量内存为代价实现您想要的结果。我宁愿使用常量内存方法,它在运行时实际上是有界的,因为它不太可能长时间运行。@wxyz这不是均匀分布,您不能指定范围。@wxyz和均匀分布的随机变量之和不是均匀分布的!“不幸的是,最坏情况的运行时间为无穷大。”是的,得到最坏情况的概率为零(0)。