Wie zuverlässig ist die Zufälligkeit des Shuf-Befehls?

Wie zuverlässig ist die Zufälligkeit des Shuf-Befehls?

Ich habe den folgenden Befehl ausgeführt, um 1 Milliarde Zufallszahlen zu generieren:

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

Zu meiner Überraschung war dies in weniger als 10 Minuten erledigt. Dann ließ ich die Ausgabedatei durchlaufen, uniq -dum zu ermitteln, wie viele der generierten Zahlen doppelt waren, und war erneut überrascht, als sich herausstellte, dass es 0 waren. Ich ließ die Ausgabedatei ebenfalls durchlaufen, uniq -uum sort -udiese Ergebnisse zu bestätigen.

Wie shufkann der Befehl in so relativ kurzer Zeit eine Milliarde Zufallszahlen generieren und kann ich mich auf seine Zufälligkeit verlassen? Beachten Sie, dass ich für meine Zwecke keinen kryptografisch sicheren Zufallszahlengenerator benötige, sondern nur etwas, das gut genug ist, um immer eine eindeutige Zahl zurückzugeben.

Antwort1

Das shufDienstprogramm mischt seine Eingabe, indem es eine zufällige Permutation seiner Eingabezeilen ausgibt. Laut der Manpage ist „jede Ausgabepermutation gleich wahrscheinlich“. Eine Analogie wäre das Mischen eines Kartenspiels.

Wenn die Eingabezeilen Duplikate enthalten, shufenthält auch die Ausgabe von Duplikate. Warum? Weil es shufeine zufällige Permutation seiner Eingabe durchführt. Wenn die Eingabezeilen keine Duplikate enthalten, shufenthält die Ausgabe von auch keine Duplikate.

In Ihrem Beispiel bewirkt die Option shuf -i 1-1000000000, dass die Eingabe so erfolgt, als käme sie aus einer Datei, die den Bereich vorzeichenloser Dezimalzahlen von 1 bis 1000000000 enthält, also eine vorzeichenlose Ganzzahl pro Zeile. Mit anderen Worten: Die Option verhält sich so, als hätte sie 1000000000 Zeilen Eingabe, wobei jede Zeile eine eindeutige vorzeichenlose Ganzzahl enthält. Daher sind in der Ausgabe keine Duplikate zu finden.-ishufshuf

verwandte Informationen