【问题标题】:From 256bit randomize from array of 54 elements来自 54 个元素的数组的 256 位随机数
【发布时间】:2015-03-30 19:20:53
【问题描述】:

如果我有一个 256 位数组(选择器),我如何使用 256 位数组从 54 个元素的数组中选择 5 个元素?可以只从选择器数组中获取前 K 位来完成它,而不是使用所有 256 位。 要求是:

  • 相同的选择器将导致选择相同的 5 个元素。
  • 需要它在统计上是公平的,所以如果我运行所有可能的位 选择器数组,它将带来均匀分布的次数 在 5 元素数组中。

我知道可以从 54 个数组中选择 5 个元素的 2,598,960 种组合,而无需关心选择它们的顺序。

【问题讨论】:

  • 很好。无论您尝试做什么,祝您好运。你有问题吗?
  • @MarcB 编辑了一个问题。
  • 好问题。赞成取消愚蠢的反对票。

标签: random probability


【解决方案1】:

您需要从 54 个中选择一个,从 53 个中选择一个,... 从 50 个中选择一个。一次取 6 个随机位作为 1..64 中的数字。只需丢弃任何太大的(超过 54、53 或其他)。平均而言,您需要六到七次尝试才能获得 5 个随机数。您有 42 个可用,因此您不会用完,而且您的分布将完全一致。

【讨论】:

  • 为什么要跳两步采摘? “54 个中的一个,52 个中的一个,...... 50 个中的一个”
  • 我不能随机,我不想用随机。给定的 256 位是随机表示。
  • 你有 256 个随机位。那是 42 组,每组 6 个。你用完的几率大约是 10 ** 24 中的 2。如果你每秒这样做一百万次,那么每 63 万亿年左右就会出现一个问题。如果您真的担心这一点,请添加代码以在发生这种情况时设置特定顺序......它仍然非常接近统计上的完美,以至于没有任何可能的程序可以区分。
  • 任何一个 6 位数字超过 54 的概率约为 22%。你需要 36 次失败。 .22 到 36 日大约是 10 ** 24 分之二。
  • 如果您的位是真正随机的,则不会。六个随机位与 000000 或 111111 一样可能是 101010——这就是随机的含义。如果你的位不是随机的,那么所有的赌注都会被取消。此外,我知道我的计算并不准确(42 次失败中的 36 次失败比连续 36 次失败的可能性更大),但它在同一个范围内。
【解决方案2】:

好吧,如果 2^K 大于 2.598,960*,您可以使用 K 位来选择 5 个元素。您不会得到完全均匀的分布,因为 2 的任何幂都不能被 2,598,960 整除。

*我没有检查你的数学,我只是假设 2,598,960 是正确的

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2020-11-19
    • 2013-11-14
    • 2014-06-19
    • 2019-04-26
    • 2021-12-22
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多