Насколько надежна случайность команды shuf?

Насколько надежна случайность команды shuf?

Я запустил следующую команду, чтобы сгенерировать 1 миллиард случайных чисел:

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

К моему удивлению, это удалось сделать менее чем за 10 минут. Затем я прогнал выходной файл, uniq -dчтобы определить, сколько из сгенерированных чисел были дубликатами, и снова удивился, когда оказалось, что это 0. Я также прогнал выходной файл uniq -u, sort -uчтобы подтвердить эти результаты.

Как shufкоманда может генерировать миллиард случайных чисел за такой относительно короткий промежуток времени, и могу ли я положиться на ее случайность? Обратите внимание, что мне не нужен криптографически безопасный генератор случайных чисел для моих нужд, просто что-то достаточно хорошее, чтобы всегда возвращать уникальное число.

решение1

Утилита shufперемешивает свои входные данные, выводя случайную перестановку своих входных строк. Согласно ее man-странице, "Каждая выходная перестановка равновероятна". Аналогией будет перетасовка колоды карт.

Если входные строки содержат дубликаты, то и вывод из shufтакже будет содержать дубликаты. Почему? Потому что shufвыполняет случайную перестановку своих входных данных. Если входные строки не содержат дубликатов, то и вывод из shufне будет содержать дубликатов.

В вашем примере, shuf -i 1-1000000000опция -iзаставляет shufдействовать так, как будто ее входные данные поступили из файла, содержащего диапазон беззнаковых десятичных целых чисел от 1 до 1000000000, по одному беззнаковому целому числу на строку. Другими словами, shufдействует так, как будто у нее 1000000000 строк входных данных, каждая из которых содержит уникальное беззнаковое целое число. Следовательно, в выходных данных не будет найдено дубликатов.

Связанный контент