避免只有单个随机值的模偏差

时间:2018-08-21 13:31:09

标签: random modulo

我想创建一个介于0和n之间的随机值。作为源,我从Oracle接收到一个随机的256位值。

只要做

source % (n + 1)

引入模偏置。我见过的模偏差的解决方案是进行while循环,直到该值位于适合源范围的n的最大倍数之内-但在我的情况下,我只能绘制一次随机源值。

尽管我的n小得多,比2 ^ 32小。在这种情况下,有什么方法可以生成没有模偏差的随机值?

1 个答案:

答案 0 :(得分:0)

在假设您的随机数生成器是统一的情况下,除非0是{{的除数,否则无法将其映射到nn+1上的无偏生成器。 1}}。这是因为除非2^256划分2^256,否则不可能将大小为n+1的集合划分为n+1个等概率的子集。话虽这么说,如果2^256n小得多,则在进行类似2^256之类的事情时偏离均匀性将是微不足道的。