Zar atma formülü (kaba olmayan kuvvet)


14

Her şeyden önce bu sorunun nerede gönderileceğinden emin değilim. Bir istatistik sorununun NP-Complete olup olmadığını ve programlı olarak çözmemesini istiyorum. Burada yayınlıyorum çünkü istatistik problemi merkez nokta.

Bir problemi çözmek için daha iyi bir formül bulmaya çalışıyorum. Sorun: 4d6 (4 sıradan 6 taraflı zar) varsa ve hepsini bir kerede yuvarlarsam, en düşük sayıya sahip bir kalıbı çıkarın ("düşme" olarak adlandırılır), sonra kalan 3'ü toplayın, olası her sonucun olasılığı nedir ? Cevabının bu olduğunu biliyorum:

Sum (Frequency): Probability
3   (1):         0.0007716049
4   (4):         0.0030864198
5   (10):        0.0077160494
6   (21):        0.0162037037
7   (38):        0.0293209877
8   (62):        0.0478395062
9   (91):        0.0702160494
10  (122):       0.0941358025
11  (148):       0.1141975309
12  (167):       0.1288580247
13  (172):       0.1327160494
14  (160):       0.1234567901
15  (131):       0.1010802469
16  (94):        0.0725308642
17  (54):        0.0416666667
18  (21):        0.0162037037

Ortalama 12.24 ve standart sapma 2.847'dir.

Yukarıdaki cevabı kaba kuvvetle buldum ve bunun için bir formül olup olmadığını bilmiyorum. Bu sorunun NP-Complete olduğundan şüpheleniyorum ve bu nedenle sadece kaba kuvvetle çözülebilir. Tüm 3d6 olasılıklarını (3 normal 6 taraflı zar) elde etmek ve ardından her birini yukarı doğru eğmek mümkün olabilir. Bu, kaba kuvvetten daha hızlı olurdu, çünkü tüm zarlar tutulduğunda hızlı bir formülüm var.

Tüm zarları üniversitede tutmak için formülü programladım. İstatistik profesörüme bunu sormuştum ve daha sonra bana açıkladığı bu sayfayı buldu . Bu formül ve kaba kuvvet arasında büyük bir performans farkı var: 50d6 20 saniye sürdü, ancak 40 saniye sonra en az 8d6 damla düştü (krom bellek tükeniyor).

Bu problem NP-Complete midir? Evet ise, lütfen bir kanıt sağlayın, hayır ise lütfen çözmek için kaba olmayan bir kuvvet formülü sağlayın.

NP-Complete hakkında fazla bir şey bilmediğimi unutmayın, bu yüzden NP, NP-Hard veya başka bir şey düşünüyor olabilirim. NP-Completeness'un kanıtı benim için işe yaramaz. Bunu istememin tek nedeni insanların tahmin etmesini önlemektir. Bu konuda çalıştığımdan bu yana uzun zaman geçti çünkü lütfen benimle çıplak olun: İstatistikleri hatırlamıyorum ve bunu çözmem gerekebilir.

İdeal olarak ben N düştü ama çok daha basit bir şey ile başlıyorum Y tarafı ile zar X sayısı için daha genel bir formül arıyorum.

Düzenle:

Ben de formül çıkış frekansları tercih ediyorum ama sadece çıkış olasılıkları kabul edilebilir.

İlgilenenler için ben JavaScript whuber cevabını programlamış benim GitHub'dan (bu yalnızca testler aslında tanımlanmış işlevleri kullanmak taahhüt olarak).


1
Bu ilginç bir soru. Burada konu ile ilgili olması gerektiğini düşünüyorum. İlginiz için teşekkür ederim.
gung - Monica'yı eski

1
Bu ayar ilginç olsa da, henüz cevaplanmış bir soru sormadınız: NP-tamlığı fikri, sadece bir tanesini tanımlarken, bir sınıf problemine bağlı . Tam olarak nasıl genelleştirilmesini istersiniz? Zar sayısının değişebileceğini ima etseniz de, çeşitli ek seçenekler mümkündür ve farklı cevaplar verebilirler: yüzlerin sayısını, yüzlerdeki değerleri, zarların sayısını ve atılan zarların sayısını değiştirebilirsiniz. aralarındaki çeşitli ilişkilerle çeşitli şekillerde.
whuber

1
@whuber Herhangi bir karmaşıklık teorisi bilmiyor ama sanırım zar sayısını değiştirerek ortaya çıkan problemlerin ailesinden sorduğu açık. Bunun için verimli bir algoritmaya sahip olduğumu da düşünüyorum.
Andy Jones

2
@Andy sonunda "N düştü zaman Y tarafı zar X sayısı için daha genel bir formül" soruyor görüyorum.
whuber

@whuber Hah! Görünüşe göre düşündüğüm kadar net değil. Üzgünüm benim hatam.
Andy Jones

Yanıtlar:


5

Çözüm

Her biri sonuçlarına eşit şans veren zar olsun . Let hepsi zaman değerlerinin minimum zar bağımsız atılır.1 , 2 , , d = 6 K nn=41,2,,d=6Kn

bağlı tüm değerlerinin toplamının dağılımını düşünün . Let bu toplamı. Minimumun en az olduğu göz önüne alındığında, verilen herhangi bir değerini oluşturmanın yollarının sayısı için oluşturma işlevi ,K X X knKXXk

(1)f(n,d,k)(x)=xk+xk+1++xd=xk1xdk+11x.

Zar bağımsız olduğundan, tüm zarının veya daha yüksek değerlerini gösterdiği değerlerini oluşturmanın yollarının sayısı için oluşturma işlevi ,n kXnk

(2)f(n,d,k)(x)n=xkn(1xdk+11x)n.

Bu oluşturma işlevi, aştığı olaylar için terimler içerir , bu yüzden bunları çıkarmamız gerekir. Bu nedenle değerlerini oluşturmak için yollar sayısı için üretici fonksiyon verilen, , olduğuk X K = kKkXK=k

(3)f(n,d,k)(x)nf(n,d,k+1)(x)n.

En yüksek değerlerinin toplamının, eksi en küçük, eşit olan tüm değerlerin toplamı olduğuna dikkat edin . Bu nedenle, oluşturma işlevinin ile bölünmesi gerekir . Bu zar herhangi bir kombinasyonunun ortak şans eseri çarpılarak bir olasılık üretme fonksiyonu haline :n1XKk(1/d)n

(4)dnk=1dxk(f(n,d,k)(x)nf(n,d,k+1)(x)n).

Tüm polinom ürünleri ve güçleri işlemlerinde hesaplanabildiğinden (bunlar kıvrımlardır ve bu nedenle ayrık Hızlı Fourier Dönüşümü ile gerçekleştirilebilir), toplam hesaplama çabası . Özellikle, bir polinom zaman algoritmasıdır.O(nlogn)O(knlogn)


Misal

Sorudaki örneği ve ile ele alalım .n=4d=6

Formül ve PGF için şartına verir(1)XKk

f(4,6,1)(x)=x+x2+x3+x4+x5+x6f(4,6,2)(x)=x2+x3+x4+x5+x6f(4,6,5)(x)=x5+x6f(4,6,6)(x)=x6f(4,6,7)(x)=0.

Bunları yükseltmek , formül olarak güç üretirn=4(2)

f(4,6,1)(x)4=x4+4x5+10x6++4x23+x24f(4,6,2)(x)4=x8+4x9+10x10++4x23+x24f(4,6,5)(x)4=x20+4x21+6x22+4x23+x24f(4,6,6)(x)4=x24f(4,6,7)(x)4=0

Formül Bunların takip eden farklar olan(3)

f(4,6,1)(x)4f(4,6,2)(x)4=x4+4x5+10x6++12x18+4x19f(4,6,2)(x)4f(4,6,3)(x)4=x8+4x9+10x10++4x20f(4,6,5)(x)4f(4,6,6)(x)4=x20+4x21+6x22+4x23f(4,6,6)(x)4f(4,6,7)(x)4=x24.

Formül sonuçlanan toplamı olduğu(4)

64(x3+4x4+10x5+21x6+38x7+62x8+91x9+122x10+148x11+167x12+172x13+160x14+131x15+94x16+54x17+21x18).

Örneğin, ilk üç zar toplamı şansı katsayısı , için eşit14x14

64×160=10/81=0.123456790123456.

Soruda belirtilen olasılıklarla mükemmel bir uyum içindedir.

Bu arada, ortalama (bu sonuçtan hesaplandığı gibi) ve standart sapma .15869/129612.24459876513612487/16796162.8468444

yerine zar için benzer (optimize edilmemiş) bir hesaplama yarım saniyeden daha az sürdü ve bunun hesaplama gerektiren bir algoritma olmadığı iddiasını destekledi. İşte dağıtımın ana bölümünün bir çizimi:n=400n=4

şekil

Minimum eşit olması muhtemel olduğundan ve toplam normal dağılımına (ortalama ve standart sapması yaklaşık ) çok yakın , ortalama son derece yakın olmalıdır son derece yakın ve standart sapma . Bu, grafiği doğru bir şekilde tanımlayarak, muhtemelen doğru olduğunu gösterir. Aslında, tam olarak hesaplanması için yaklaşık bir ortalama verir daha büyük ve etrafına bir standart sapma azK1X(400×7/2,400×35/12)140034.156514001=139934.162.13×103213991.24×1031400×35/12 .


1
Cevabınız hızlı ve doğru, bu yüzden cevap olarak işaretledim. Ayrıca bir düzenlemede mümkünse frekanslara sahip olmak güzel olacağını söyledim. Bunun için cevabınızı düzenlemeniz gerekmez, çünkü 6^-4çarpanın frekanstan olasılığa dönüştürmek için kullanıldığını görebilirsiniz .
SkySpiral7

6

Düzenleme: @SkySpiral aşağıdaki formülü çalışmak için sorun vardı. Şu anda sorunun ne olduğunu çözmek için zamanım yok, bu yüzden bunu okuyorsanız, yanlış olduğu varsayımı altında ilerlemek en iyisidir.


Değişen sayıda zar, kenar ve damla ile ilgili genel sorundan emin değilim, ancak drop-1 durumu için etkili bir algoritma görebildiğimi düşünüyorum. Niteleyici doğru olduğundan emin değilim, ama şu anda herhangi bir kusur göremiyorum.

Herhangi bir zar atarak başlayalım. Varsayalım temsil kalıp inci ve varsayalım toplamını temsil etmektedir zar. SonraXnnYnn

p(Yn=a)=kp(Yn1=ak)p(Xn=k)

Şimdi Diyelim ki zar atıldığında zarın toplamıdır . SonraZnn

p(Zn=a)=p(nth die is the smallest)p(Yn1=a)+p(nth die is not the smallest)kp(Zn1=ak)p(Xn=k)

en az dağılımı olarak tanımlarsak ,Mnn

p(Zn=a)=p(XnMn1)p(Yn1=a|XnMn1)+p(Xn>Mn1)kp(Zn1=ak)p(Xn=k|Xn>Mn1)

ve kullanarak hesaplayabiliriz.Mn

p(Mn=a)=p(XnMn1)p(Xn=a|XnMn1)+p(Xn>Mn1)p(Mn1=a|Xn>Mn1)

Her neyse, bunların hepsi ve tabanlı dinamik bir programlama algoritması . İçinde kuadratik olmalı .Yn,ZnMnn

edit: hesaplaması hakkında bir yorum yapılmıştır . Yana her biri sadece biz sadece tüm olanakları üzerinde özetleyebilirim, bir ile altı arasında değerler alabilir:p(XnMn1)Xn,Mn1

p(XnMn1)=a,bp(Xn=a,Mn1=b,ab)

Benzer şekilde, Bayes kuralı uygulanıp olası değerleri üzerinden toplanarak hesaplanabilir .p(Xn=k|Xn>Mn1)Xn,Mn1


1
+1 Bu doğru görünüyor ve bunun karesel olduğunu söylediniz. Ama istatistik aldığımdan bu yana birkaç yıl geçti (öncelikle bir programcıyım). Bu yüzden cevabı işaretlemeden önce bunu tam olarak anlamak istiyorum. Ayrıca p var (nth en küçük ölmek) nth en küçük ile bağlı ise bu içerir mi görüyorum? Tüm 3'lerin yuvarlanması gibi.
SkySpiral7

İyi yakalama. Eğer haddeleme kalıbı inci mevcut asgari olarak aynı olan bir bırakılan olarak, söz konusu kalıp kabul edilebilir. Bu durumda dağılım . s yansıtmak için bazı s takas ettik . nYn1(<)()
Andy Jones

Teşekkür ederim. Bunu doğru anlarsam, formüllerinizin cevabı olduğunu düşünüyorum. Ancak p (X (n)> M (n-1)) (veya olumsuzlaması) veya p (X (n) = k | X (n)> M (n-1) hesaplamayı bilmiyorum )) bu cevabı henüz kullanamıyorum. Bunu cevap olarak işaretleyeceğim ama daha fazla bilgi istiyorum. Bunları açıklamak için cevabınızı düzenleyebilir misiniz yoksa başka bir soru olarak mı göndermeliyim?
SkySpiral7

Cevabımı düzenledi.
Andy Jones

1
Maalesef bir buçuk yıl geçtiğini biliyorum ama sonunda bu formülü kod haline getirmeye başladım. Ancak p (Z (n) = a) formülü yanlış görünür. Diyelim ki 2 tarafı olan 2 zar (en düşük damla), sonucun 1 olma şansı nedir? X (n) 'in en küçük veya bağlı olma şansı 3/4 ve p (Y (n-1) = 1) 1/2'dir, böylece doğru cevap olmasına rağmen Z (n) en az 3/8 döndürür 1/4. Z formülü benim için doğru görünüyor ve nasıl düzeltileceğini bilmiyorum. Sormak için çok fazla değilse: ne düşünüyorsun?
SkySpiral7

1

Test için, tüm olasılıkları numaralandırmaya daha az ağırlık verirken, saf kaba kuvvetin sonuçlarıyla eşleştiği gibi makul bir algoritmaya sahibim. Aslında 4d6, damla 1'in yukarıdaki probleminden daha genelleşti.

Önce bazı gösterim: Let Eğer haddeleme olduğunu göstermektedir zar (değerleri tam sayı yüzleri için ), ve sadece en yüksek göz önüne alındığında zar devirdi. Çıkış zar değerlerinin bir dizisi, örneğin, bir verimleri Eğer haddeleme durumunda , dört zar üzerinde. (Ben buna bir "dizi" diyorum, ama burada önemli değil, özellikle de sonunda önemsediğimiz tek şey dizinin toplamı olduğu için burada önemli değil.)XNdYXY1YN43d63,4,51,3,4,5

olasılığı (veya daha spesifik olarak ) orijinal sorunun basitleştirilmiş bir versiyonudur, burada sadece belirli bir zar seti düşünüyoruz ve bir verilen toplam.P(XNdY=S)P(43d6=S)

Varsayalım sahiptir farklı değerleri, bu şekilde, ve her bir numaraya sahiptir . Örneğin, , , ve .Sks0,s1,...,sksi>si+1siciS=3,4,4,5(s0,c0)=(5,1)(s1,c1)=(4,2)(s2,c2)=(3,1)

aşağıdaki şekilde hesaplayabilirsiniz :P(XNdY=S)

P(XNdY=S)=(i=0k1(Xh=0i1chci))(j=0XN(ck+XNck+XNj)(sk1)j)YX

Bu oldukça dağınık, biliyorum.

Ürünü ekspresyon tüm ama yoluyla değerlerin düşük iterating olan , ve bu değerler, zar arasında dağıtılabilir tüm yolları hesaplanması. İçin , bu sadece var , ama için , biz kaldırmak zorunda zaten kenara seti olmuştur zar ve benzer şekilde için kaldırmanız gerekir .i=0k1Ss0(Xci)s1c0s0sih=0i1ch

toplam ifadesi , bırakılan zarlardan eşit olduğu tüm olasılıkları yinelemektedir , çünkü bu değer olarak ile bırakılmamış zarların olası kombinasyonlarını etkilemektedir .j=0XNsksk

Örneğin, :P[43d6=(5,4,4)]

(s1,c1)=(5,1)
(s2,c2)=(4,2)

Yukarıdaki formülü kullanarak:

P[43d6=(5,4,4)]=(41)((33)30+(32)31)64=5162=0.0308641975¯

ve olduğunda formül, bir etki alanı sorununda ve bu, bir ilk terime yol açar ; bu, belirsizdir ve olarak ele alınması gerekir . Böyle bir durumda, aslında bir toplama gerekli değildir ve atlanabilir, çünkü atılan tüm zarlar da değerine sahip olacaktır .j = 0 0 0 1 s k = 1sk=1j=0001sk=1

İşte burada kaba bir kuvvete güvenmem gerekiyor. Orijinal problem, toplamın bir değer olma olasılığını hesaplamaktı ve , bırakıldıktan sonra kalan bireysel zarları temsil ediyordu. Bu , toplamı verilen değer olan tüm olası dizileri (sıralamayı göz ardı ederek) için olasılıkları toplamanız gerektiği anlamına gelir . Belki de bunu bir kerede tüm bu değerleri arasında hesaplamak için bir formül var , ama henüz bunu açmayı denemedim.S SXNdYSS

Bunu ilk olarak Python'da uyguladım ve yukarıdakini matematiksel olarak ifade etme girişimi. Python algoritmam doğru ve makul derecede verimlidir. tüm dağılımını hesaplamak için yapılabilecek bazı optimizasyonlar vardır ve belki bunu daha sonra yapacağım.XNdY


Bir programcı olarak Python kodunuzu anlamak benim için daha kolay olabilir (her ne kadar Python'u hiç kullanmamış olsam da aynı olabilir). Kodu buraya göndermek konu dışı ama github vb bir bağlantı gönderebilirsiniz
SkySpiral7

1
Cevabınız doğru olabilir ve karmaşıklığı azaltmak gibi görünüyor O(Y^X)için O((Y+X-1)!/(X!*(Y-1)!))ama yine de bir whuber cevabı olarak verimli değildir O(c*X*log(X)). +1 yanıtınız için teşekkür ederiz.
SkySpiral7
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.