주사위를 떨어 뜨리는 공식


14

우선이 질문을 어디에 게시 해야할지 잘 모르겠습니다. 통계 문제가 NP-Complete인지 프로그래밍 방식으로 해결하지 않는지 묻습니다. 통계 문제가 중심이기 때문에 여기에 게시하고 있습니다.

문제를 해결하기위한 더 나은 공식을 찾으려고합니다. 문제는 만약 내가 4d6 (4 보통 6면 주사위)을 가지고 그들을 한꺼번에 굴리면 가장 낮은 숫자의 주사위를 제거하고 (“떨림”이라고 함) 나머지 3을 합하면 각각의 가능한 결과의 확률은 얼마입니까? ? 나는 대답이 이것이라는 것을 안다.

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

평균은 12.24이고 표준 편차는 2.847입니다.

나는 무차별 대항으로 위의 답변을 찾았으며 그에 대한 공식이 있는지 여부를 모르겠습니다. 나는이 문제가 NP-Complete이라고 생각하므로 무차별 한 힘으로 만 해결할 수있다. 3d6 (3 보통 6면 주사위)의 모든 확률을 얻은 다음 각각을 위로 기울일 수 있습니다. 모든 주사위를 보관할 때 빠른 공식을 가지기 때문에 이것은 무차별보다 빠릅니다.

나는 모든 주사위를 대학에 유지하기 위해 공식을 프로그래밍했습니다. 나는 통계 교수에게 그것에 대해 물었고 그는 이 페이지 를 발견 하고 나에게 설명했다. 이 공식과 무차별 대입 성능에는 큰 차이가 있습니다. 50d6은 20 초가 걸렸지 만 8d6은 40 초 후에 가장 낮은 충돌이 발생했습니다 (크롬에 메모리 부족).

이 문제가 NP-Complete입니까? 만약 그렇다면, 증거를 제시하고, 그렇지 않다면 그것을 해결하기 위해 무브 러트 포스 공식을 제공하십시오.

NP-Complete에 대해 잘 모르므로 NP, NP-Hard 또는 다른 것을 생각할 수 있습니다. NP-Completeness에 대한 증거는 내가 그것을 요구하는 유일한 이유는 사람들이 추측하지 못하도록하는 것입니다. 그리고 내가 일한 지 오랜 시간이 지났으므로 나와 함께 맨손으로하십시오 : 나는 통계를 기억하지 못하고 이것을 해결해야 할 수도 있습니다.

이상적으로는 N이 떨어질 때 Y면이있는 X 개의 주사위 수에 대한보다 일반적인 공식을 찾고 있지만 훨씬 더 간단한 것으로 시작하고 있습니다.

편집하다:

또한 주파수를 출력하는 공식을 선호하지만 확률 만 출력하는 것이 허용됩니다.

관심있는 사람들을 위해 GitHub 에서 JavaScript로 whuber의 답변을 프로그래밍했습니다 (이 커밋에서는 실제로 정의 된 함수 만 테스트 사용).


1
이것은 흥미로운 질문입니다. 나는 그것이 주제에 관한 주제라고 생각합니다. 당신의 배려에 감사합니다.
gung-Monica Monica 복원

1
이 설정은 흥미롭지 만 아직 대답 할 수없는 질문은 없습니다. NP- 완전성에 대한 아이디어 는 문제 의 종류 에 따라 다르지만 한 가지만 설명했습니다. 정확히 어떻게 일반화하고 싶습니까? 주사위 수는 다양 할 수 있지만 다양한 추가 옵션이 가능하며 다른 답변을 얻을 수 있습니다. 그들 사이의 다양한 관계와 다양한 방법으로.
whuber

1
@whuber 그녀는 복잡한 이론을 알지 못하지만 주사위 수를 변경하여 발생하는 문제의 가족을 요구하고 있음이 분명합니다. 또한 효율적인 알고리즘이 있다고 생각합니다.
Andy Jones

2
@Andy 나는 결국 그녀가 "N을 떨어 뜨렸을 때 Y면을 가진 X 개의 주사위 수에 대한보다 일반적인 공식"을 요구하는 것을 보았습니다.
whuber

@whuber Hah! 내가 생각했던 것만 큼 분명하지 않습니다. 미안 내 실수.
Andy Jones

답변:


5

해결책

결과 균등 한 기회를주는 주사위를 각각 보자 . 하자 모든 경우 값의 최소 주사위가 독립적으로 발생한다.1 , 2 , , d = 6 K nn=41,2,,d=6Kn

조건부 인 모든 값 의 합의 분포를 고려하십시오 . 를이 합계로 하자 . 최소값이 이상인 경우 임의의 주어진 값을 형성하는 방법의 수에 대한 생성 함수 는 다음과 같습니다.K X X knKXXk

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

주사위는 독립적이기 때문에 모든 주사위가 이상의 값을 나타내는 값을 형성하는 방법의 수에 대한 생성 함수 는 다음과 같습니다.n 개의 KXnk

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

이 생성 함수에는 가 초과 하는 이벤트에 대한 항이 포함 되므로 빼야합니다. 따라서 가 주어지면 값을 형성하는 방법의 수에 대한 생성 함수 는 다음과 같습니다.k X K = kKkXK=k

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

의 총합 것을주의 최대 값은 모든 값을 뺀 값의 최소 합은 같 . 따라서 생성 함수는 로 나눌 필요가 있습니다 . 주사위 조합의 일반적인 기회, 을 곱하면 확률 생성 함수가됩니다 .X K k ( 1 / d ) nn1XKk(1/d)n

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

모든 다항식 곱과 거듭 제곱은 연산에서 계산 될 수 있으므로 (볼록하고 따라서 이산 고속 푸리에 변환으로 수행 할 수 있음) 총 계산 노력은 . 특히 다항식 시간 알고리즘입니다.O ( KO(nlogn)O(knlogn)


및 질문의 예를 살펴 보겠습니다 .d = 6n=4d=6

에서 조건부 의 PGF에 대한 공식 은X K k(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.

받는들을 제기 식으로 전력 생산( 2 )n=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

공식 의 연속적인 차이점은 다음 과 같습니다.(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.

공식 의 결과 합계 는(4)

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

예를 들어, 상위 세 개의 주사위를 합산하는 기회 의 계수 , 같음x 1414x14

64×160=10/81=0.123456790123456.

그것은 질문에 인용 된 확률과 완벽하게 일치합니다.

그런데 평균 (이 결과에서 계산)은 이며 표준 편차는 입니다.15869/129612.24459876513612487/16796162.8468444

대신에 주사위에 대한 유사한 (최적화되지 않은) 계산 은 0.5 초 미만으로 걸렸으며 이는 계산이 까다로운 알고리즘이 아니라는 주장을 뒷받침했습니다. 다음은 분포의 주요 부분에 대한 도표입니다.n = 4n=400n=4

그림

최소 는 일 가능성이 높고 합 는 정규 분포 ( 매우 가깝기 때문에 (평균은 이고 표준 편차는 약 ) 평균은 매우 가까우며 표준 편차는 매우 가까워 야합니다 . 이것은 플롯이 잘 설명되어 있음을 잘 설명합니다. 실제로, 정확한 계산은 평균 보다 큰 의 평균을 제공하고 약 의 표준 편차 는(1) X ( 400 × 7 / 2 , 400 × 35 / 12 ) 1400 34.1565 1400 - 1 = 1,399 34.16 2.13 × 10 - 32 1399 1.24 × 10 - 31 K1X(400×7/2,400×35/12)140034.156514001=139934.162.13×103213991.24×1031400×35/12 .


1
귀하의 답변은 빠르고 정확하므로 답변으로 표시했습니다. 또한 편집에서 가능한 경우 주파수를 갖는 것이 좋을 것이라고 말했습니다. 이를 위해 6^-4곱셈기가 빈도를 확률로 변환하는 데 사용 되므로 답을 편집 할 필요가 없습니다 .
SkySpiral7

6

편집 : @ SkySpiral은 아래 수식을 작동시키는 데 문제가있었습니다. 나는 현재 문제가 무엇인지 알아낼 시간이 없으므로이 글을 읽는다면 그것이 틀렸다는 가정하에 진행하는 것이 가장 좋습니다.


다양한 주사위, 측면 및 방울의 일반적인 문제는 확실하지 않지만 드롭 1 사례에 대한 효율적인 알고리즘을 볼 수 있다고 생각합니다. 한정자는 그것이 정확하다는 것을 완전히 확신하지 못하지만, 지금은 결함을 볼 수 없다는 것입니다.

주사위를 떨어 뜨리지 마십시오. 가정 나타내는 다이 일을하고 있다고 가정 합계 나타내는 주사위. 그때 N Y N NXnnYnn

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

이제 하나의 주사위가 떨어질 때 이 주사위 의 합 이라고 가정 합니다. 그때Znn

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)

을 최소 다이 의 분포로 정의하면Mnn

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

우리는 다음을 사용하여 을 계산할 수 있습니다Mn

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

어쨌든 이것은 모두 및 기반의 동적 프로그래밍 알고리즘을 제안합니다 . 2 차 여야합니다 .Yn,ZnMnn

편집 : 계산 방법에 대한 의견이 제기되었습니다 . 이후 각 단지 우리가 모든 가능성에 걸쳐 합계 수, 1 ~ 6의 값을 취할 수 :p(XnMn1)Xn,Mn1

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

유사하게 는 Bayes 규칙을 적용한 다음 가능한 값을 합산하여 계산할 수 있습니다 .p(Xn=k|Xn>Mn1)Xn,Mn1


1
+1 이것은 옳아 보이고 이차적이라고 말했습니다. 그러나 통계를 얻은 지 몇 년이 지났습니다 (저는 주로 프로그래머입니다). 그래서 이것을 답변으로 표시하기 전에 이것을 완전히 이해하고 싶습니다. 또한 나는 당신이 p (nth가 가장 작은 주사위)를 가지고 있음을 보았습니다 .nth가 가장 작게 묶여 있다면 여기에 포함됩니까? 모든 3을 굴리는 것과 같은.
SkySpiral7

잘 잡았습니다. 경우] 압연 다이 번째가 현재의 최소값과 동일 하나 떨어로서, 우리는 다이 간주 할 수있다. 이 경우 분포는 입니다. 이것을 반영하기 위해 대해 바꿨습니다 . Y n - 1nYn1(<)()
Andy Jones

감사합니다. 이것을 올바르게 이해하면 수식이 답이라고 생각합니다. 그러나 나는 p (X (n)> M (n-1)) (또는 그것의 부정) 또는 p (X (n) = k | X (n)> M (n-1)을 계산하는 방법을 모른다 )) 아직이 답변을 사용할 수 없습니다. 이것을 답변으로 표시하지만 자세한 정보를 원합니다. 이에 대한 설명을 편집 할 수 있습니까? 아니면 다른 질문으로 게시해야합니까?
SkySpiral7

내 답변을 수정했습니다.
Andy Jones

1
1 년 반이 지났음을 알고 죄송하지만 마침내이 수식을 코드로 구현했습니다. 그러나 p (Z (n) = a) 수식이 잘못 나타납니다. 2면을 가진 2 개의 주사위 (최저 하락)를 가정하면 결과는 1 일 가능성은 얼마입니까? X (n)이 가장 작거나 묶일 확률은 3/4이고 p (Y (n-1) = 1)은 1/2이므로 Z (n)은 정답이 있지만 최소 3/8을 반환합니다. 1/4. Z 수식이 나에게 정확하고 수정 방법을 모르겠습니다. 너무 많이 물어 보지 않으면 어떻게 생각하십니까?
SkySpiral7

1

나는 테스트 할 때 모든 가능성을 열거하는 데 덜 의존하면서 순수한 무차별 대국의 결과와 일치하는 것처럼 보이는 합리적인 알고리즘을 가지고 있습니다. 실제로 위의 4d6, drop 1보다 더 일반적입니다.

먼저 몇 가지 표기법 : 는 면 (정수 값 ~ )으로 주사위를 굴리고 있으며 가장 높은 주사위 만 고려 것을 나타냅니다 . 출력은 주사위 값의 순서입니다. 예를 들어 4 개의 주사위에 를 굴린 경우 은 산출 합니다. (이를 "시퀀스"라고 부르지 만 순서는 중요하지 않습니다. 특히 우리가 결국 관심을 갖는 것은 시퀀스의 합이기 때문입니다.)XNdYXY1YN43d63,4,51,3,4,5

확률 (또는 더 구체적으로, )는 원래의 문제의 단순화 된 버전이며, 여기서 우리는 특정 주사위 세트만을 고려하고 있으며, 모든 가능한 세트가 주어진 합계.P(XNdY=S)P(43d6=S)

가정 갖는 고유 값, 되도록, , 각 의 카운트 갖는다 . 예를 들어 인 경우 , 및 .K S 0 , s의 (1) , . .Sks0,s1,...,sksi>si+1siciS=3,4,4,5(s0,c0)=(5,1)(s1,c1)=(4,2)(s2,c2)=(3,1)

다음과 같은 방법으로 를 계산할 수 있습니다 .P(XNdY=S)

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

꽤 지저분합니다.

제품 표현 은 의 가장 작은 값을 제외한 모든 값을 반복 하고 해당 값이 주사위에 분산 될 수있는 모든 방법을 계산합니다. 들어 , 그건 그냥 하지만, 대한 , 우리는 제거해야 이미 따로 설정을왔다 주사위 , 마찬가지로에 대한 제거해야한다 .i=0k1Ss0(Xci)s1c0s0sih=0i1ch

합계 식 은 와 함께 드롭되지 않은 주사위의 가 와 같은 가능성에 대한 모든 가능성을 반복 합니다. 를 값으로 사용하여 삭제되지 않은 주사위의 가능한 조합에 영향을주기 때문입니다 .j=0XNsksk

예를 들어 고려해 보겠습니다 .P[43d6=(5,4,4)]

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

따라서 위의 공식을 사용하십시오.

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

요약에서 및 경우 수식은 세분화되어 첫 번째 항은 지며,이 항은 미정이며 로 처리해야합니다 . 이러한 경우, 실제로 합산이 전혀 필요하지 않으며, 드롭 된 주사위는 모두 값을 가지 생략 할 수 있습니다 ., J = 0 0 0 1 S K = 1sk=1j=0001sk=1

이제 여기에 약간의 무력에 의존해야하는 곳이 있습니다. 원래 문제는 합계가 어떤 값일 확률을 계산하는 것이 는 떨어 뜨린 후 남은 개별 주사위를 나타냅니다. 이는 합이 주어진 값인 모든 가능한 시퀀스 (순서 무시)에 대한 확률을 더해야 함을 의미합니다 . 아마도 모든 값에 대해 이것을 한 번 에 계산하는 공식이 있을 수도 있지만 아직 브로 칭을 시도조차하지 않았습니다.S SXNdYSS

나는 이것을 파이썬에서 먼저 구현했으며, 위의 방법은 수학적으로 표현하려는 시도입니다. 내 파이썬 알고리즘은 정확하고 합리적입니다. 의 전체 분포를 계산하는 경우에 최적화 할 수 있으며 , 나중에 수행하겠습니다.XNdY


프로그래머로서 파이썬 코드를 이해하는 것이 더 쉬울 수 있습니다 (파이썬을 사용한 적이 없어서 동일 할 수도 있습니다). 여기에 코드를 게시하는 것은 주제와하지만 당신은 github에 등에 대한 링크를 게시 할 수
SkySpiral7

1
당신의 대답은 정확 수 있으며에서 복잡성을 줄일 것 O(Y^X)O((Y+X-1)!/(X!*(Y-1)!))하지만 여전히의 whuber의 대답만큼 효율적이지 않습니다 O(c*X*log(X)). +1을 통해 답변 해 주셔서 감사합니다.
SkySpiral7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.