Як імітувати штамп, що дає справедливу монету


21

Припустимо, що вам дали справедливу монету і ви хотіли б імітувати розподіл ймовірності багаторазово перегортання справедливої ​​(шестигранної) плашки. Моя початкова думка полягає в тому, що нам потрібно вибрати відповідні цілі числа , такі, що . Отже, перевернувши монету раз, ми відображаємо число, закодоване біт-рядком k довжиною, до виходів штампу, ділимо діапазон на 6 інтервалів довжини . Однак це неможливо, оскільки має два як єдиний простий фактор, але прості коефіцієнти включають три. Має бути якийсь інший простий спосіб зробити це, правда?2 k = 6 m k [ 0 , 2 k - 1 ] m 2 k 6 mk,m2k=6mk[0,2k1]m2k6m


Дивіться це питання, де це питання розглядається в більш загальному вигляді.
Рафаель

Ось стаття на цю тему . Він пояснює, як використовувати вибірку відхилення та як повторно використовувати "витрачені" біти, щоб пришвидшити подальший перелік.
ZeroUltimax

Відповіді:


12

Щоб мати трохи більш ефективний метод, ніж той, який вказав @FrankW, але використовуючи ту саму ідею, ви можете перевернути монету разів, щоб отримати число нижче 2 n . Потім інтерпретуйте це як партію m die flips, де m - найбільше число, так що 6 m < 2 n (як уже було сказано, рівність тут ніколи не дотримується). Якщо ви отримаєте число більше або дорівнює 6 м, ви повинні відхилити це значення і повторити всі n переворотів.n2nmm6m<2n6mn

Ви можете реалізувати функцію, яка повертає один фліп монети, зробивши монет перевертання, а потім кешуйте результат для наступних запитів на перевертання m - 1 die.nm1

Цікавим моментом є те, що деякі значення кращі за інші, оскільки вони мають меншу швидкість відхилення. Ось список хороших значень (тобто значень, які мають менший показник відхилення, ніж попередні):n

n m r
3 1 0.25
8 3 0.15625
13 5 0.05078125
44 17 0.0378308072686
75 29 0.0247036782182
106 41 0.0113974522704
243 94 0.00933096248381
380 147 0.00726015308463
517 200 0.00518501504347
654 253 0.00310553931213
791 306 0.00102171682348

отримані за формулами: .

m=nlog32r=13m2n

Перший рядок відповідає відповіді @FrankW зі швидкістю відхилення 25%. Наступні числа є приємними: і n = 13 можуть зберігатися в одній цілій статичній змінній. Зокрема, коефіцієнт відхилення n = 13 становить лише 5%, що є розумним покращенням щодо 25% і робить це хорошим кандидатом для можливої ​​реалізації.n=8n=13n=13


Вам не потрібно 6 ^ м, достатньо 6 * м. Таким чином, ви можете використовувати 5 кидків, щоб отримати 5-бітове число, відхиляючи лише 1/16 випадків.
Taemyr

Коефіцієнт відхилення 5% для 13 кидань жахливий, якщо порівнювати з 25% для 3 кидань. Тому що 25% на 3 закидання відхилять лише 4 рази (тобто витрачають більше 12 кидок) у 0,390625% випадків.
Taemyr

@Taemyr 5-бітове число може представляти 32 різні значення, що дозволяє представляти одну кістку (оскільки два кубики мають 36 можливостей). Тож допустимі лише значення 6/32 зі швидкістю відхилення 27/32 = 84%
Емануеле Паоліні

@Taemyr: коефіцієнт відхилення на n кидок означає, що в середньому кожна партія n кидок відкидається з вірогідністю r . Так, у середньому кожне кидання відкидається з однаковою швидкістю r (не залежно від n ). rnnrrn
Емануеле Паоліні

Так. І використовуючи метод FrankW, який має коефіцієнт відхилення 25% для партії з 3 кидок, ви матимете ймовірність 1-0.00390625 прийняти не пізніше 4-ї партії.
Taemyr

29

Що ви можете зробити, це використовувати метод, який називається вибіркою відхилення :

  • Переверніть монету 3 рази і інтерпретуйте кожен фліп як біт (0 або 1).
  • Об’єднайте 3 біти, давши двійкове число в .[0,7]
  • Якщо число в , візьміть це як рулон.[1,6]
  • В іншому випадку, тобто якщо результат дорівнює або 7 , повторіть фліп.07

З можливих результатів призводять до припинення в кожному наборі, ймовірність знадобитися більше, ніжlнаборів фліпсів, щоб отримати рулон матриці(1-668l . Отже, цей метод ефективний на практиці.(168)l=14l

Покращення:

@ Відповідь Ангела вказує, що кількість монет перевертається у кожному наборі, але першу можна зменшити з 3 до 2, використовуючи відмінність між і 7 як перший біт для наступного набору.07

@Emanuele Paolini пояснює, як ви можете зменшити кількість переписок, якщо вам потрібно кілька роликів.


Чи не став би цей метод більшою центральною тенденцією до справжнього d6?
Red_Shadow

3
k[0..2k1]

Якщо ви хитрий з відхиленим діапазоном, в цьому випадку насправді легко використовувати, щоб зменшити кількість необхідних перевернень монети у випадку відхилення.
Mooing Duck

@MooingDuck ви можете вирішити, чи відмовитись від результату після 2-х закидів: якщо він 0,0 0,1 або 1,0, тоді киньте ще раз за останній шматочок, інакше почніть спочатку
храповик виродка

1
k

7

Альтернативою вибірці відхилення (як описано у відповіді FrankW ) є використання алгоритму масштабування, який враховує відповідь [7,8], як ніби це була інша гортання монети.

На mathforum.org є дуже детальне пояснення , включаючи алгоритм ( NextBit()він буде гортати вашу справедливу монету).

Справа закидання кісток справедливою монетою (вибірки 2 → 6) простіша за загальний алгоритм. Ви просто сприймаєте помилку (7 або 8) як черговий вклад монети і виконайте ще два обертання.


2

Інший підхід до імітації рулону dN за допомогою dM (у випадку конкретного запитання, заданого d6 за допомогою d2), - це поділ інтервалу [0, 1) на N рівних інтервалів довжиною 1 / N, [0, 1 / N), [1 / N, 2 / N), ..., [(N-1) / N, N).

Використовуйте dM для створення бази-фракції, 0.bbbb ..., у [0, 1). Якщо це потрапляє в [(i-1) / N, i / N), прийміть i як рулон dN. Зауважте, що вам потрібно лише генерувати достатню кількість базових М цифр дробу, щоб визначити, в якому інтервалі він знаходиться.


Умови припинення потрібно зробити більш точними. Якщо я переверну монету, як тільки я закінчую або двійковим дробом 0,0 або 0,1 (тобто ½), обидва з них потрапляють в інтервал (що відповідає 0 і 3 відповідно в цьому випадку). Вам потрібно розглядати згенеровану дріб як діапазон, і ви зупиняєтесь, коли весь діапазон знаходиться в одному інтервалі. Я впевнений, що це ви мали намір, але я не думаю, що це зрозуміло.
rici

1

Можливо більш просте пояснення вдосконаленої вибірки відхилення.

Я даю це пояснення, оскільки, можливо, це може допомогти спростити розуміння чи аналіз ймовірностей у деяких ситуаціях.

FrankW пропонує використовувати відбір проб відхилення, тричі перевернути монету, зберігаючи результат, якщо вона знаходиться у правильному діапазоні, або повторити три ручки в іншому випадку до успіху.

Анхель пропонує зберегти один фліп на кожному випробуванні, замінивши його двійковим вибором, що залишився від двох невикористаних значень попереднього набору з трьох.

Це означає, що один біт інформації вироблявся з першими трьома відворотами, які не потрібно було виробляти. Точніше, вам потрібно буде перевернути монету лише два рази, щоб знати, чи буде успішний поточний набір гортань.

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

Цього можна досягти щонайменше двома способами, а точніше в двох різних інтерпретаціях фліп. Можуть бути й інші.

Групування результатів по парах

Ідея полягає в тому, щоб розглянути лише три значення (1,2), (3,4) і (5,6), представлені будь-якими трьома конфігураціями подвійного перевороту, скажімо, TT, TH, HT. Потім ви можете застосувати вибірку відхилень із подвійним переворотом, повторюючи щоразу, коли ви отримаєте конфігурацію відмови HH.

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

Раннє виявлення несправності фліп-встановлення

Ідея полягає у використанні дещо іншого зчитування конфігурації з трьох фліп. Якщо Head і Tail інтерпретуються як 1 і 0, то конфігурація повинна відповідати двійковій інтерпретації плюс одна. Тобто TTT (тобто 000) відповідає 1, HTH (тобто 101) відповідає 6, HHT (тобто 110), а HHH (тобто 111) відповідає 7 і 8, або все, що знаходиться назовні [1,6].

Тоді ми знаємо, що фліп-набір є успішним або невдалим лише з першими двома обертами. Якщо вони виробляють HH, набір фліп виходить з ладу незалежно від останнього обертання. Так це можна пропустити.

Я думаю, що раннє виявлення завжди може використовуватися як пояснення, але залежно від кількості облич на ваших імітованих кістях виявлення несправностей може статися після змінної кількості фліп.

Наприклад, для кубиків з 10 граней, в принципі, потрібен набір з 4 фліп, з 6 конфігураціями, що відповідають відмові. Трюк полягає в тому, щоб усі конфігурації відмов у високому кінці послідовності двійкових значень були наступними:

TTTT  0000   1
HTTT  1000   9
HTTH  1001  10
HTHT  1001  11
HTHH  1011  12
HHTT  1100  13
HHHH  1111  16

Успішні конфігурації відповідають діапазону [1, 10], а відмовам - 11,16].

Тоді ви виходите з ладу, коли перші два фліпи дають HH, або коли перші три дають HTH, навіть не намагаючись навіть намагатися пропустити фліп набору.

Якщо ви не помилитесь, ви просто скасуєте набір фліп.


1

До цього є два відомих підходи. Один - "відбір проб". Наприклад, скористайтеся трьома бітами, щоб вибрати одне з шести значень, повторивши дві додаткові вибірки. Або використовуйте 14 біт (значення 8192), щоб вибрати 5 значень від 1 до 6 (7776 можливостей), повторивши спробу в 13 з 256 випадків.

Інша частина - використання декомпресійної частини алгоритму стиснення / декомпресії: за допомогою арифметичного кодування послідовність випадкових значень від 1 до 6 можна стиснути майже без надмірності. Створіть стиснуту послідовність випадково та розпакуйте її. Це набагато складніше, але практично не вимагатиме додаткових випадкових чисел.


0

Вибачте заздалегідь, якщо пояснення зайве. Я не був впевнений, на скільки деталей потрібно зайти чи наскільки легко поняття зрозуміло.

Скажіть, у вас є три монети (справедливі монети). Якщо ви поступово призначите значення кожній стороні кожної монети, у вас буде шість значень.

Як ось так: На першій монеті голови - 1, а хвости - 2. На другій монеті голови - 3, а хвости - 4. На третій монеті голови - 5, а хвости - 6 ".

Перегортаючи монети, ви отримаєте набір з трьох чисел, ваш поточний набір. Тепер ваш поточний набір стане вашим попереднім набором, і ви повторите процес отримання нового набору з трьох чисел.

Продовжуйте робити це, доки одне і лише одне число не збігаються з вашого поточного набору. Це ваш номер.

Отже, якщо у вас є [голови, хвости, голови] для поточного набору, це було б [1, 4, 5]. Тепер ви знову переверніть їх, і ваш поточний набір [2, 4, 5]. Два матчі. Не добре. Спробуйте ще раз. Ви отримуєте [2, 3, 6]. Лише один матч. Ваш номер два.

Буде рівний шанс, що будь-яке число з’явиться, але це не особливо економічно, враховуючи, що є лише зміна 3/32, що будь-яка пара наборів буде успішною (лише один матч). Так що в середньому алгоритм повинен був би повторитись приблизно десять разів. Крім того, нелегко узагальнити штампи з непарними номерами.

Принаймні, можливо, це їжа для роздумів. Дуже цікаве запитання.


4
lognn12n2n/2n

0

Я три рази перевернув би монету і інтерпретував результат як двійкове число, відкидаючи результати поза діапазоном.

Наприклад, нехай голови будуть 1, а хвости - 0. Якщо ви перевернули його три рази і отримали голови, хвостики, голови, у вас було б двійкове 101, що становить 5 в десятковій частині. HHT = 110b = 6. TTT = 000b = 0 і HHH = 111b = 7, обидва з них виходять за межі діапазону і будуть відхилені, і ви б переглянули всі цифри.


1
Це просто відповідь Франка.
Рафаель

2
@Raphael Насправді суворий набір відповідей Френка , оскільки Френк вирішує очікуваний час роботи.
Девід Річербі

0

На жаль, неможливо (вірно) змоделювати (справедливий) помер, використовуючи (послідовності) справедливі монети.

62

Але можна зробити це за допомогою справедливої ​​«три-монети» (якщо такий термін можна використовувати). Значення монети з 3-ма результатами. І проста 2-х монета, тож спільний простір цих 2-х монет відповідає точно простору подій штампа.

Вибірка відхилення (як згадується в деяких відповідях) справді може забезпечити приблизне моделювання. Але це все одно матиме кількість помилок чи невідповідності ймовірностей (у кінцевий час). Тож, якщо хтось хоче насправді відповідати просторам подій цих двох систем, то випадки це не спрацюють.

У імовірнісному моделюванні (зразком відторгнення якого є приклад) згенеровані типові послідовності дійсно демонструють відносні елементарні ймовірності (у цьому випадку простір події штампу). Однак (як зазначено в коментарях) кожна з цих типових послідовностей може містити довільно довгі підпослідовності абсолютно однакових результатів. Це означає, що для використання вибірки відхилення (в деяких випадках) або це може зайняти довільно довгий час, або згенерований розподіл буде упередженим (тобто не чесним загибеллю) через надмірну представленість або недостатнє представлення деяких частин свого простору подій . якби це не було, то був би можливий детермінований алгоритм, який би точно відповідав просторам подій плашки та монети (які не відповідають розмірності).


Коментарі не для розширеного обговорення; ця розмова переміщена до чату .
Жил 'SO- перестань бути злим'

@Gilles, занадто поганий негативний голос все ще є, незважаючи на всі пояснення та балаканину (щодо правильності), що тривали: p
Нікос М.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.