shuf コマンドのランダム性はどの程度信頼できるのでしょうか?

shuf コマンドのランダム性はどの程度信頼できるのでしょうか?

10 億個の乱数を生成させるために、次のコマンドを実行しました。

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

驚いたことに、これは 10 分以内に完了しました。次に、uniq -d生成された数字のうち重複している数字がいくつあるかを調べるために出力ファイルを実行し、0 個であることが判明して再び驚きました。また、これらの結果を確認するために、出力ファイルを実行し、を実行しましuniq -usort -u

shufこのコマンドは、どのようにして、比較的短時間で 10 億の乱数を生成できるのでしょうか。また、そのランダム性は信頼できるのでしょうか。私のニーズには、暗号的に安全な乱数ジェネレーターは必要なく、常に一意の番号を返すのに十分なものがあれば十分です。

答え1

このshufユーティリティは、入力行のランダムな順列を出力することで入力をシャッフルします。マニュアルページによると、「各出力順列は、同じ確率で発生します」。これは、トランプのデッキをシャッフルするようなものです。

入力行に重複が含まれている場合、 からの出力shufにも重複が含まれます。なぜでしょうか? はshuf入力のランダムな順列を実行するためです。入力行に重複が含まれていない場合、 からの出力にもshuf重複は含まれません。

例では、shuf -i 1-1000000000オプションにより、 は、1 から 1000000000 までの符号なし 10 進整数 (1 行につき 1 つの符号なし整数) を含むファイルからの入力であるかのように動作します。言い換えると、 は、-i各行に一意の符号なし整数を含む 100000000 行の入力があるかのように動作します。したがって、出力に重複は見つかりません。shufshuf

関連情報