来自 54 个元素的数组中的 256 位随机数

From 256bit randomize from array of 54 elements

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

我知道有 2,598,960 种 5 元素的组合可以从 54 的数组中 selected,而不关心 selecting 它们的顺序。

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

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

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