Adil bir para verilen bir kalıp nasıl simüle edilir


21

Adil bir bozuk para verildiğini ve adil (altı taraflı) bir ölümü tekrar tekrar çevirmenin olasılık dağılımını simüle etmek istediğinizi varsayalım. İlk fikrim uygun tamsayılarını seçmemiz gerektiğidirk,m , öyle ki2k=6m . Bu nedenle, madeni parak kez çevrildikten sonra, k-uzunluğu bit dizisi tarafından kodlanan sayıyı , [0,2k1] aralığını uzunluğunun her biri 6 aralığabölerek kalıbın çıktılarına eşlerizm. Ancak, bu, mümkün değildir2k onun sadece asal faktör olarak iki var ama ana faktörler arasında6m üç içerir. Bunu yapmanın başka basit bir yolu olmalı, değil mi?


Sorunun daha genel bir şekilde ele alındığı bu soruya bakın .
Raphael

İşte konuyla ilgili bir makale . Reddetme örneklemesinin nasıl kullanılacağını ve daha fazla ruloyu hızlandırmak için "boşa giden" bitlerin nasıl yeniden kullanılacağını açıklar.
ZeroUltimax

Yanıtlar:


12

@FrankW'ın işaret ettiğinden biraz daha verimli bir yönteme sahip olmak için, ancak aynı fikri kullanarak, 2 n'nin altında bir sayı elde etmek için paranızı kez çevirebilirsiniz . Sonra bir parti olarak nitelendirildiği, m kalıp çevirir, m yüzden en büyük sayıyı olduğunu 6 m < 2 n (önceden söylendiği gibi, eşitlik burada tutan asla). 6 metreye eşit veya daha büyük bir sayı alırsanız, değeri reddetmeniz ve tüm n döndürmeleri tekrarlamanız gerekir .n2nmm6m<2n6mn

jeton çevirme yaparak tek bir kalıp çevirme döndüren bir işlevi uygulayabilir ve ardından aşağıdaki m - 1 kalıp çevirme istekleri için sonucu önbelleğe alabilirsiniz .nm1

İlginç olan nokta, bazı değerlerinin diğerlerinden daha iyi olmasıdır, çünkü daha az ret oranı vardır. İyi değerlerin bir listesi (yani, öncekilerden daha düşük ret oranına sahip değerler):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

formüllerle elde edildi: .

m=nlog32r=13m2n

İlk satır @FrankW cevabına% 25 reddetme oranına karşılık gelir. Aşağıdaki sayılar iyidir: ve n = 13'ün her ikisi de tek bir tamsayı statik değişkeninde tutulabilir. Özellikle n = 13'ün reddedilme oranı sadece% 5'tir, bu da% 25'e göre mantıklı bir gelişmedir ve bunu olası bir uygulama için iyi bir aday yapar.n=8n=13n=13


6 ^ m'ye ihtiyacınız yok, 6 * m yeterlidir. Böylece 5 bitlik sayıları kullanarak sadece 1 / 16'lık vakaları reddederek 5 bitlik bir sayı elde edebilirsiniz.
Taemyr

13 tosse için% 5'in reddedilme oranı, 3 tosse için% 25 ile karşılaştırıldığında korkunçtur. Çünkü 3 tosse için% 25, ​​vakaların% 0.390625'inde sadece 4 kez reddeder (yani 12 tosse'dan fazla harcar).
Taemyr

@Taemyr 5 bit sayı, tek bir zarı temsil etmenizi sağlayan 32 farklı değeri temsil edebilir (çünkü iki zarın 36 olasılığı vardır). Yani 27/32 =% 84 ret oranıyla sadece 6/32 değerleri kabul edilebilir
Emanuele Paolini

@Taemyr: bir oranını reddetme ile n , ortalama olarak her parti fırlatır vasıtasıyla N fırlatır olasılığı ile reddedilen r . Yani, ortalama olarak, her atış aynı r oranı ile reddedilir ( n'ye bağlı değil ). rnnrrn
Emanuele Paolini

Evet. Ve Franks'ın 3'lük bir parti için% 25'lik bir iade oranına sahip yöntemi kullanarak, 1-0.00390625'in 4. partiden daha geç kabul etmeme olasılığınız olacaktır.
Taemyr

29

Yapabileceğiniz şey, reddetme örneklemesi adı verilen bir yöntem kullanmaktır :

  • Bozuk parayı 3 kez çevirin ve her bir kapağı biraz (0 veya 1) olarak yorumlayın.
  • [0,7]
  • [1,6]
  • 07

beri68l(168)l=14l

İyileştirmeler:

07

@Emanuele Paolini , birden fazla kalıp rulosuna ihtiyacınız varsa yeniden kayıt sayısını nasıl azaltabileceğinizi açıklar.


Bu yöntem, gerçek bir d6'nın daha fazla merkezi eğilimi göstermez mi?
Red_Shadow

3
k[0..2k1]

Reddedilen menzil ile kurnazsanız, bu durumda, reddetme davasında gerekli jeton çevirme sayısını azaltmak için bunu kullanmak kolaydır.
Mooing Duck

@MooingDuck, sonucunuzu 2 fırlatmadan sonra atıp atmayacağınıza karar verebilirsiniz: 0,0 0,1 veya 1,0 ise, son bit için tekrar atın, aksi takdirde baştan başlayın
cırcır ucube

1
k

7

Reddetme örneklemesine bir alternatif ( FrankW'nin cevabında açıklandığı gibi ), başka bir bozuk para sayıyormuş gibi [7,8] cevabını dikkate alan bir ölçeklendirme algoritması kullanmaktır.

Mathforum.org'da algoritma da dahil olmak üzere çok ayrıntılı bir açıklama var ( NextBit()adil paranızı çevirir).

Adil bir para ile zar atma davası (örnekleme 2 → 6) genel algoritmadan daha kolaydır. Başka bir bozuk para girişi olarak bir başarısızlık (7 veya 8) alırsınız ve iki tane daha döndürürsünüz.


2

DM kullanarak bir dN rulosunu simüle etmek için başka bir yaklaşım (d2 kullanarak bir d6 kullanarak d6 sorulan özel soru söz konusu olduğunda), [0, 1) aralığını 1 / N, [0, N eşit aralığa bölmektir. 1 / N), [1 / N, 2 / N), ..., [(N-1) / N, N).

[0, 1) 'de bir baz-M fraksiyonu, 0.bbbb ... oluşturmak için dM kullanın. Bu, [(i-1) / N, i / N) 'ye düşerse, i'yi dN'nin rulosu olarak kabul edin. Hangi aralıkta olduğunu belirlemek için yalnızca kesirin yeterli baz-M basamaklarını oluşturmanız gerektiğini unutmayın.


Fesih koşulu daha kesin hale getirilmelidir. Madeni parayı çevirdiğimde, her ikisi de bir aralığa düşen (bu durumda sırasıyla 0 ve 3'e karşılık gelen) ikili fraksiyon 0.0 veya 0.1 (yani ½) ile bitiririm. Oluşturulan kesiti bir aralık olarak görmeniz ve tüm aralık tek bir aralıkta olduğunda durmanız gerekir. Eminim istediğin buydu ama bunun net olduğunu düşünmüyorum.
rici

1

İyileştirilmiş reddetme örneklemesinin muhtemelen daha basit bir açıklaması.

Bu açıklamayı, bazı durumlarda olasılıkların anlaşılmasını veya analizini basitleştirmeye yardımcı olabileceği için veriyorum.

FrankW reddetme örneklemesi kullanmayı, bozuk parayı üç kez çevirmeyi , doğru aralıkta ise sonucu korumayı ya da başarı elde edene kadar üç ters çevirmeyi tekrarlamayı önerir .

Ángel , her üç deneme için bir flip kaydetmenizi ve önceki üç setin kullanılmayan iki değerinden kalan ikili bir seçim ile değiştirmenizi önerir .

Bu, gerçekten, ilk üç döndürmeyle üretilmesi gerekmeyen bir bit bilginin üretildiği anlamına gelir. Daha kesin olarak, mevcut flips setinin başarılı olup olmayacağını bilmek için jetonu sadece iki kez çevirmeniz gerekir.

Geçerli kapak takımının başarılı olup olmayacağını bilmek önemli olan tek olasılıktır , çünkü başarılı bir kapak takımını yorumlamak olasılıktan bağımsızdır. Ve bu set için tüm döndürmeler tamamlanmadan önce bilinebilir .

Bu, en az iki şekilde veya daha kesin olarak iki farklı yorumda elde edilebilir. Başkaları da olabilir.

Sonuçları çiftler halinde gruplama

Fikir, TT, TH, HT gibi herhangi bir üç çift-flip konfigürasyon ile temsil edilen sadece üç değeri (1,2), (3,4) ve (5,6) dikkate almaktır. Ardından, hata yapılandırmasını HH aldığınızda yineleyerek, çift döndürmeli reddetme örneklemesi uygulayabilirsiniz.

Üç başarılı konfigürasyondan birini aldıktan sonra, ilgili çiftin birinci veya ikinci değerini almanız gerekip gerekmediğine karar vermek için jetonu bir kez daha çevirmeniz yeterlidir.

Flip-set arızasının erken tespiti

Fikir, üç kapaklı yapılandırmanın biraz farklı bir okumasını kullanmaktır. Head and Tail 1 ve 0 olarak yorumlanırsa, yapılandırma ikili yorumlama artı bire karşılık gelmelidir. Yani TTT (yani 000) 1'e karşılık gelir, HTH (yani 101) 6'ya karşılık gelir, HHT (yani 110) ve HHH (yani 111) 7 ve 8'e veya dışarıdaki herhangi bir şeye karşılık gelir [1,6].

Sonra flip-setin sadece ilk iki döndürmeyle başarılı veya başarısız olduğunu biliyoruz. HH üretiyorlarsa, kapak seti son kapaktan bağımsız olarak başarısız olur. Böylece atlanabilir.

Erken tespitin her zaman bir açıklama olarak kullanılabileceğini düşünüyorum , ancak simüle zarınızdaki yüzlerin sayısına bağlı olarak, değişken sayıda döndürmeden sonra hata tespiti olabilir.

Örneğin, 10 yüz zar için, prensipte, hataya karşılık gelen 6 konfigürasyon ile 4 döndürme setine ihtiyacınız vardır. İşin püf noktası, ikili değerlerin dizisinin üst ucundaki tüm hata yapılandırmalarına aşağıdaki gibi sahip olmaktır:

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

Başarılı yapılandırmalar [1, 10] aralığına ve [11,16] aralığındaki arızalara karşılık gelir.

Daha sonra, ilk iki döndürme HH verdiğinde veya ilk üç döndürme, kümenin eksik döndürmelerini denemek zorunda kalmadan başarısız olur.

Başarısız olursanız, sadece döndürme kümesini sonlandırırsınız.


1

Bunun iyi bilinen iki yaklaşımı vardır. Bunlardan biri "ret örneklemesi". Örneğin, iki ekstra örnek için tekrar deneyerek altı değerden birini seçmek için üç bit kullanın. Veya 256 bitten 13'ünü tekrar deneyerek 1'den 6'ya (7776 olasılık) 5 değer seçmek için 14 bit (8192 değeri) kullanın.

Diğeri, bir sıkıştırma / açma algoritmasının dekompresyon kısmını kullanmaktır: Aritmetik kodlama ile, 1'den 6'ya kadar olan rastgele değerler dizisi neredeyse hiç artıklık olmadan sıkıştırılabilir. Sıkıştırılmış diziyi rastgele oluşturun ve açın. Bu çok daha karmaşıktır, ancak pratik olarak herhangi bir ek rastgele sayı gerektirmez.


0

Açıklama gereksizse önceden özür dilerim. Ne kadar detay gireceğinden veya kavramın ne kadar kolay anlaşıldığından emin değildim.

Diyelim ki üç paranız var (adil paralar). Her madalyonun her iki tarafına aşamalı olarak bir değer atarsanız, altı değeriniz olur.

Şöyle ki: İlk madeni parada kafalar 1 ve kuyruklar 2'dir. İkinci madeni parada kafalar 3 ve kuyruklar 4'tür. Üçüncü madeni parada kafalar 5 ve kuyruklar 6'dır.

Madeni paraları çevirmek sizi geçerli sayınız olan üç sayıdan oluşan bir kümeyle bırakacaktır. Şimdi, mevcut kümeniz önceki kümeniz olacak ve yeni üç sayı kümesi almak için işlemi tekrarlayacaksınız.

Geçerli ayarınızdan bir önceki kümeye kadar yalnızca bir sayı eşleşene kadar bunu yapmaya devam edin. Bu senin numaran.

Mevcut set için [kafalar, kuyruklar, kafalar] varsa, bu [1, 4, 5] olacaktır. Şimdi onları tekrar çeviriyorsunuz ve mevcut setiniz [2, 4, 5]. İki maç. İyi değil. Tekrar dene. [2, 3, 6] elde edersiniz. Sadece bir maç. Numaranız iki.

Herhangi bir sayının görünme şansı eşit olacaktır, ancak belirli bir çift setin başarılı olması için sadece 3/32 değişiklik olması durumunda (sadece bir maç) özellikle uygun maliyetli değildir. Ortalama olarak, algoritmanın yaklaşık on kez tekrarlanması gerekir. Ayrıca, tek sayılı kalıp için kolayca genelleştirilemez.

En azından belki düşünce için yiyecek. Çok ilginç bir soru.


4
lognn12n2n/2n

0

Madalyonu üç kez çevirirdim ve sonucu ikili bir sayı olarak yorumlayıp sonuçları aralık dışına çıkardım.

Örneğin, kafaların 1 ve kuyrukların 0 olmasına izin verin. Eğer üç kez çevirdiyseniz ve kafalarınız, kuyruklarınız, kafalarınız varsa, ondalık sayıdaki 5 olan ikili 101'e sahip olursunuz. HHT = 110b = 6. TTT = 000b = 0 ve HHH = 111b = 7, ikisi de aralık dışı ve reddedilecek ve tüm basamaklar için yeniden yansıtabilirsiniz.


1
Bu sadece Frank'in cevabı.
Raphael

2
@Raphael Aslında Frank'in cevabının katı bir alt kümesi , çünkü Frank beklenen çalışma süresini ele alıyor.
David Richerby

0

Maalesef, adil para (lar) ı kullanarak (adil) bir ölümü simüle edemez.

62

Ancak bunu adil bir "tri-coin" ile yapabilirsiniz (eğer böyle bir terim kullanılabilirse). 3 sonuç ile bir sikke anlamına gelir. Ve basit bir 2 madalyon, bu nedenle bu 2 madalyonun ortak alanı, kalıbın olay alanıyla tam olarak eşleşir.

Reddetme örneklemesi (bazı cevaplarda belirtildiği gibi) gerçekten yaklaşık bir simülasyon sağlayabilir . Ancak yine de bir miktar hata veya olasılıkların yanlış eşleşmesi olacaktır (sonlu zamanda). Yani eğer bu iki sistemin olay alanlarını gerçekten eşleştirmek isterse, işe yaramayacağı durumlar olacaktır.

Olasılıksal simülasyonda (bunun reddetme örneklemesi bir örnek olduğu), üretilen tipik sekanslar aslında göreceli temel olasılıklar sergiler (bu durumda bir kalıbın olay alanı). Bununla birlikte (yorumlarda belirtildiği gibi) bu tipik sekansların her biri , tam olarak aynı sonuçlara sahip keyfi olarak uzun alt sekanslar içerebilir . Bu, reddetme örneklemesini (bazı durumlarda) kullanmak için, olay alanının bazı bölümlerinin aşırı temsili veya yetersiz temsili nedeniyle, ya keyfi olarak uzun sürebileceği ya da üretilen dağılımın taraflı olacağı (yani adil kalıp değil) anlamına gelir. . durum böyle değilse, o zaman bir kalıbın ve madalyonun olay alanlarına tam olarak uyan (boyutsallıkla uyuşmayan) deterministik bir algoritma mümkün olacaktır.


Yorumlar uzun tartışmalar için değildir; bu sohbet sohbete taşındı .
Gilles 'SO- kötü olmayı bırak

@Gilles, devam eden tüm açıklamalara ve sohbete rağmen (doğrulukla ilgili) çok kötü olumsuz oy hala var: p
Nikos M.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.