Чи введе це зміщення в те, якими мають бути випадкові числа?


11

Припустимо файл даних з 80+ мільйонами одиниць і нулями, генерованими випадковим чином.

З цього файлу ми хочемо створити список випадкових десяткових чисел.

Це план зробити це перетворення.

  1. Розділіть 80 мільйонів цифр на групи з 4 двійкових цифр.
  2. Перетворіть кожен чотиризначний двійковий код у десятковий.
  3. Відкиньте всі десяткові значення більше 9.

Це повинно призвести до ряду випадкових цілих чисел від 0-9

Ось турбота. 24 двійкові цифри, що складаються з 6 угруповань з 4 двійкових цифр, які відповідають значенням 10-15, містять 17 одиниць і лише 7 нулів. Чи вплине цей дисбаланс на розподіл парних чи непарних цілих чисел чи пошкодить випадковість остаточного рядка десяткових цифр?

Оновлення: З опублікованих відповідей здається, що перерахований вище метод є здоровим. Я згоден з цим висновком. Однак я все ще не розумію, чому видалення більш ніж удвічі більше нулів, ніж нулі з двійкового рядка, не зміщує результат на меншу кількість непарних чисел. Шукаю пояснень.


9
Є більш ефективні методи. Наприклад, ви можете розділити бітовий рядок на групи з 10, перетворити їх у їх трицифрову базу представлень 10 та відкинути будь-які зі значеннями 1000 або більше. Це використовує 97,6% бітів, а не лише 62,5%. Ви не можете зробити набагато краще, ніж це. (Ви можете використовувати групи з 681 та перетворити їх у 205-значні рядки базової 10, використовуючи, таким чином, майже 99,7% бітів.)
whuber

Відповіді:


18

Давайте порахуємо і подивимось. При побудові файлу всі 4-бітні рядки однаково ймовірні. Є 16 таких струн. Ось вони:

 0. 0000
 1. 0001
 2. 0010
 3. 0011
 4. 0100
 5. 0101
 6. 0110
 7. 0111
 8. 1000
 9. 1001
10. 1010
11. 1011
12. 1100
13. 1101
14. 1110
15. 1111

Ваша процедура викидає рядки від 10 до 15. Тож у випадках, які ви фактично використовуєте, ви обираєте від 0 до 9, кожен з яких однаково вірогідний, як бажано. І ми знаємо, що згенеровані десяткові цифри не залежать одна від одної, оскільки кожна використовує окремий рядок у 4 біти, і всі біти є незалежними. Ваша процедура є простим видом відбору проб відхилення .


5
Я чітко бачу цю логіку. Але я стурбований тим, що я відкидаю більше двійкових 1, ніж 0. Чому цей дисбаланс не має ніякого впливу?
Джоель В.

5
@JoelW Я думаю, я не бачу вашого аргументу. Остаточний розподіл стосується десяткових цифр, а не бітів, тому розподіл бітів не має значення.
Кодіолог

7
Це правильно, але це лише частково вирішує питання. Для вирішення питання "компромісної випадковості ... будь-яким способом" питання також слід встановити, що отримані десяткові цифри, на відмінну приблизність, не залежать . Для повноти заради цього (очевидного) результату варто присвятити одне речення пояснення.
whuber

7
Джоель, я бачу, звідки ти родом. Тут може виникнути помилкове уявлення: ви не можете змінити процес. Якщо ви хочете реконструювати потік бітів із потоку десяткових цифр, вам доведеться зробити щось на кшталт видалення всіх 8-х та 9-х та перетворення решти цифр у двійкові трійки. Це відновить рівновагу. Насправді, легко помітити, що ця «поїздка в зворотній бік» означає розбиття вашого початкового потоку на чотирибітні нібла та відкидання їх найбільш значущих бітів, залишаючи приємну рівномірно розподілену послідовність у 60 мільйонів біт.
whuber

1
@whuber Ярмарок досить; додано.
Кодіолог

4

Немає упередженості, оскільки ви просто імітуєте відкинуті деякі значення, а всі значення, включаючи збережені, генеруються з однаковою ймовірністю: введіть тут опис зображення

Код R для наведеного вище графіка дорівнює

generza=matrix(sample(0:1,4*1e6,rep=TRUE),ncol=4)
uniz=generza[,1]+2*generza[,2]+4*generza[,3]+8*generza[,4]
barplot(hist(uniz[uniz<10],breaks=seq(-0.5,9.5,le=11))$counts,col="steelblue")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.