shuf 命令的随机性有多可靠?

shuf 命令的随机性有多可靠?

我运行以下命令来生成 10 亿个随机数:

time shuf -i 1-1000000000 > "SHUF TEST 1"

令我惊讶的是,它能够在不到 10 分钟的时间内完成此操作。然后我运行输出文件以uniq -d确定生成的数字中有多少是重复的,当结果为 0 时,我再次感到惊讶。我还运行输出文件uniq -usort -u确认这些结果。

这个命令如何shuf能够在如此短的时间内生成十亿个随机数?我能依赖它的随机性吗?请注意,我不需要一个加密安全的随机数生成器来满足我的需求,只要它足够好,能够始终返回一个唯一的数字就行。

答案1

shuf实用程序通过输出输入行的随机排列来打乱其输入。根据其手册页,“每个输出排列的可能性都相同”。类比一下,就是洗牌。

如果输入行包含重复项,则 的输出shuf也将包含重复项。为什么?因为shuf对其输入执行随机排列。如果输入行不包含重复项,则 的输出shuf也将不包含重复项。

在您的示例中shuf -i 1-1000000000,该-i选项使shuf表现得好像其输入来自包含 1 到 1000000000 的无符号十进制整数范围的文件,每行一个无符号整数。换句话说,shuf表现得好像它有 1000000000 行输入,每行包含一个唯一的无符号整数。因此在输出中找不到重复项。

相关内容