【问题标题】:Convert non-uniform pseudorandom generation to uniform?将非均匀伪随机生成转换为均匀?
【发布时间】:2020-09-07 14:48:39
【问题描述】:

假设我有一个非统一的函数,它在集合 A 中生成元素。我有一个集合 B,它有可能在 A 中生成每个元素。有什么方法可以制作非统一的伪随机函数表现得像一个统一的伪随机函数。

【问题讨论】:

  • 你能放一些代码吗?目前还不清楚你想要什么。您想从 A 中统一选择吗?然后以概率 1/sizeof(N) 进行采样

标签: algorithm math optimization random


【解决方案1】:

当然。以均匀概率从 A 生成元素的简单方法:

  1. 为 A 的每个元素分配一个数字
  2. 对A的每个元素,生成一个对应的随机元素,记下其对应的个数
  3. 选择 A 中随机数最小的元素。如果存在平局,请重复首先平局的元素。

一种有效的方法是根据给定的概率使用范围编码器对随机(非均匀)元素流进行编码。这将生成一个统一的随机位流。然后,您可以假设所有符号的概率相等,从而得到 A 的均匀分布的元素。请参阅:https://en.wikipedia.org/wiki/Range_encoding

另一种生成统一随机比特流的方法是计算随机源的熵,然后将输出分成块并使用 SHA-1 等加密散列函数进行散列。块应该足够大以提供比散列函数的位长度更多的熵位。这种方法在现实生活中可能更安全,因为即使您对生成器生成的符号分布有误,它也可以工作。见:https://en.wikipedia.org/wiki/Entropy_(information_theory)

【讨论】:

    【解决方案2】:

    让我建议一个简单的算法,您不需要知道选择 A 中的每个元素的概率(在您的问题中设置 B)。我假设 A 中的每个元素都有一个已知的顺序(例如,每个元素都是一个数字)。

    算法有两个部分。第一个是生成无偏随机位的算法。我们将其称为“RandomBit()”(Morina et al. 2019)。

    1. 从 A 中绘制一个独立元素,称为 X,然后从 A 中绘制另一个独立元素,称为 Y。
    2. 如果 X 小于 Y,则返回 0。如果 Y 小于 X,则返回 1。如果两者都不是,则转到步骤 1。

    这是有效的,因为来自 A 的独立的独立抽签对在统计上是无差异的(Montes Gutiérrez 2014, De Schuymer et al. 2003);有关详细信息,请参阅我的Note on Randomness Extraction 的附录。

    接下来是在 [0, 1] 中生成均匀随机数的算法。您所要做的就是“并置足够多的随机二进制数字”(von Neumann 1951):添加 RandomBit()/2 + RandomBit()/4 + RandomBit()/8 + ....

    如果您的非均匀分布是正态分布,请参阅交叉验证上的以下问题以了解更多技巧:https://stats.stackexchange.com/questions/117689

    参考:

    • Von Neumann, J.,“与随机数字相关的各种技术”,J. Res。纳特。布尔。站立。应用程序。数学。系列 3, 36-38 (1951)。
    • Morina, G.、Łatuszyński, K. 等人,“From the Bernoulli Factory to a Dice Enterprise via Perfect Sampling of Markov Chains”,arXiv:1912.09229 [math.PR],2019 年。
    • Montes Gutiérrez, I.,“不确定性和不精确性下的替代方案比较”,博士论文,奥维耶多大学,2014 年。
    • De Schuymer、Bart、Hans De Meyer 和 Bernard De Baets。 “随机变量的随机优势的模糊方法”,2003 年国际模糊系统协会世界大会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多