Предположим, файл данных содержит более 80 миллионов единиц и нулей, сгенерированных случайным образом.
Из этого файла мы хотим создать список случайных десятичных целых чисел.
Это план сделать это преобразование.
- Разделите 80 миллионов цифр на группы из 4 двоичных цифр.
- Преобразуйте каждый 4-значный двоичный код в десятичный.
- Отменить все десятичные значения больше 9.
Это должно привести к строке случайных целых чисел от 0-9
Здесь проблема. 24 двоичные цифры, которые составляют 6 групп по 4 двоичных цифры, которые соответствуют значениям от 10 до 15, содержат 17 единиц и только 7 нулей. Повлияет ли этот дисбаланс на распределение четных и нечетных целых чисел или каким-либо образом компрометирует случайность конечной строки десятичных цифр?
Обновление: Судя по приведенным выше ответам, приведенный выше метод является правильным. Я согласен с этим выводом. Тем не менее, я до сих пор не понимаю, почему удаление более чем вдвое большего числа нулей из двоичной строки не смещает результат в сторону уменьшения числа нечетных чисел. Я ищу объяснения.
источник
Ответы:
Давайте посчитаем и посмотрим. По построению файла все 4-битные строки одинаково вероятны. Есть 16 таких строк. Вот они:
Ваша процедура выбрасывает строки с 10 по 15. Таким образом, в тех случаях, которые вы фактически используете, вы будете выбирать от 0 до 9, каждый из которых одинаково вероятен, по желанию. И мы знаем, что сгенерированные десятичные цифры не зависят друг от друга, потому что каждая использует отдельную строку из 4 бит, и все биты являются независимыми. Ваша процедура представляет собой простой вид отбраковки .
источник
Смещения нет, так как вы просто моделируете некоторые значения, которые отбрасываются, и все значения, включая те, которые сохраняются, генерируются с одинаковой вероятностью:
Код R для приведенного выше графика
источник