【问题标题】:Compute rand7() using rand5()使用 rand5() 计算 rand7()
【发布时间】:2014-02-28 02:17:18
【问题描述】:

我有一个解决方案,可以仅使用 rand5() 生成 rand7()。 解决方案之一指出: 5 * rand5() + rand5() 会以相等的概率生成数字 0 - 24,所以我们只需要循环直到我们得到一个小于 % 7 的数字

我的问题是为什么我们不能直接使用 3 * rand5() + rand5() 来生成数字

【问题讨论】:

    标签: algorithm data-structures random


    【解决方案1】:

    如果X 和Y 是集合S_5 = {0,1,2,3,4} 上的independent 和uniformly distributed,则

    1. 5*X + Y均匀分布在集合{0,...,24}上,但是
    2. 3*X + Y 不是均匀分布在{0,...,16} 上的,它对{0,...,13} 的限制也不是

    很容易看出,(1) 确实如此,因为f(x,y) = 5*x + y 是S_5 x S_5 和S_25 之间的双射。

    如果我们查看3*X + Y 的分布,我们会得到:

    >>> Counter(3*x + y for x in range(5) for y in range(5))
    Counter({3: 2, 4: 2, 6: 2, 7: 2, 9: 2, 10: 2, 12: 2, 13: 2, 0: 1, 1: 1, 2: 1, 5: 1, 8: 1, 11: 1, 14: 1, 15: 1, 16: 1}
    

    结果 3、4、6、7、9、10、12、13 的可能性是 1、2、5、8 或 11 的两倍。更多证据:

    >>> def rand7():
    ...   x = 3*rand5() + rand5()
    ...   if x < 14: return x % 7
    ...   return rand7()
    ... 
    >>> Counter(rand7() for _ in xrange(100000))
    Counter({6: 18219, 3: 18105, 4: 13734, 5: 13715, 2: 13634, 0: 13560, 1: 9033}
    

    6 和 3 有 4/22 ~ 18.2% 的机会发生,4、5、2 和 0 有 3/22 ~ 13.6% 的机会,1 只有 2/22 ~ 9.1% 的机会。那是一个被操纵的骰子。

    【讨论】:

      【解决方案2】:
      3 * rand5() + rand5()
      

      不是均匀分布的。例如,它只以一种方式生成 0,但以两种方式生成 3,因此 3 比 0 更可能出现。

      就像2 * rand5() * rand5()、4 * rand5() + rand5()等。

      但是5 * rand5() + rand5() 是均匀分布的。

      这就像生成一个以 5 为底的数字的两个随机数字。

      00 => 0
      01 => 1
      02 => 2
      03 => 3
      04 => 4
      10 => 5
      11 => 6
      12 => 7
      ...
      

      生成从 0 到 24 的每个数字只有一种方法。

      【讨论】:

        【解决方案3】:

        为了有一个均匀分布,两个随机数的贡献必须是独立的。这意味着一个的范围不能与另一个的范围重叠,也不能有任何间隙。

        在您提出的方法中,例如,有两种方法可以得到 3:第一个随机数返回 1,第二个返回 0,或者第一个返回 0,第二个返回 3。这使得它发生的可能性是两倍0 的结果,只有当两个随机数都为 0 时才会出现。

        【讨论】:

        • 嗯,可能会有重叠,但实现结果的方法数量必须对所有结果都相等。
        猜你喜欢
        • 1970-01-01
        • 2012-05-14
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-04
        • 1970-01-01
        相关资源
        最近更新 更多