¿Qué tan confiable es la aleatoriedad del comando shuf?

¿Qué tan confiable es la aleatoriedad del comando shuf?

Ejecuté el siguiente comando para generar mil millones de números aleatorios:

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

Para mi sorpresa, pudo hacerlo en menos de 10 minutos. Luego ejecuté el archivo de salida uniq -dpara determinar cuántos de los números generados estaban duplicados y nuevamente me sorprendí cuando resultó ser 0. También ejecuté el archivo de salida uniq -upara sort -uconfirmar estos resultados.

¿Cómo es posible que el shufcomando pueda generar mil millones de números aleatorios en un período de tiempo tan relativamente corto? ¿Puedo depender de su aleatoriedad? Tenga en cuenta que no necesito un generador de números aleatorios criptográficamente seguro para mis necesidades, solo algo lo suficientemente bueno como para devolver siempre un número único.

Respuesta1

La shufutilidad baraja su entrada generando una permutación aleatoria de sus líneas de entrada. Según su página de manual, "Cada permutación de salida es igualmente probable". Una analogía sería barajar una baraja de cartas.

Si las líneas de entrada contienen duplicados, la salida shuftambién contendrá duplicados. ¿Por qué? Porque shufrealiza una permutación aleatoria de su entrada. Si las líneas de entrada no contienen duplicados, la salida shufno contendrá duplicados.

En su ejemplo, shuf -i 1-1000000000la -iopción hace shufque actúe como si la entrada viniera de un archivo que contiene el rango de enteros decimales sin signo del 1 al 1000000000, un entero sin signo por línea. En otras palabras, shufactúa como si tuviera 1000000000 líneas de entrada y cada línea contiene un entero único sin signo. Por lo tanto, no se encontrarán duplicados en la salida.

información relacionada