Combinatorics Counting Puzzle : Roll 20, 8면 주사위, 동일한 값의 5 개 이상의 주사위를 얻을 확률은 얼마입니까?

StackOverflow https://stackoverflow.com/questions/1202343

문제

총 8^20 가능한 결과에 대해 20, 8면 다이를 굴리는 게임을 가정하십시오. 특정 이벤트가 발생할 확률을 계산하기 위해 이벤트가 발생할 수있는 방법의 수를 8^20으로 나눕니다.

값 3의 정확히 5 주사위를 얻는 방법의 수를 계산할 수 있습니다. .

number of ways to get exactly 5, 3's = (20 choose 5)*7^15.

대답은 문자열을 3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 , 0,0 (20 선택 5) 총 값의 횟수는 0입니다 (7 개의 법적 값을 가정) 7^15 (이것은 정확합니다).

  • 질문 1 : 동일한 값의 정확히 5 주사위를 얻는 방법 (즉, 모든 다이 값에 대해)을 얻는 방법을 어떻게 계산할 수 있습니까? 참고 : 위의 첫 번째 답변을 순진하게 사용하고 BT 8을 곱하면 엄청난 양의 이중 계산이 있습니까?

    나는 각 사례 (5 1), (5, 2 '), (5, 3'), ... (5 's, 8)를 합산 (더 간단히 8*(5 1))에 대해 해결할 수 있음을 이해합니다. 그런 다음 겹침 수 (5 1) 및 (5 2), (5 1) 및 (5 3) ... (5 1) 및 (5, 2) 및 (5, 8)의 합을 빼냅니다. 그러나 이것은 매우 지저분한 것 같습니다. 나는 많은 수의 샘플과 많은 수의 클래스까지 확장되는 방식으로 이것을 일반화 할 것입니다.

  • 얻는 방법 수를 어떻게 계산할 수 있습니까? 적어도 같은 값의 5 주사위?

    11111000000000000000000 또는 11110100000000000002 또는 11111100000001110000 또는 11011211222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333는 아니지만 0000111112222222222233334444 또는 0005115122523333333444.

수학을 설명하거나이를 지원하는 라이브러리를 가리키는 답변을 찾고 있습니다 (ESP Python Modules). 세부 사항 및 예제를위한 추가 포인트.

도움이 되었습니까?

해결책

이중 계산은 사용하면 해결할 수 있습니다 포함/제외 원리

나는 그것이 나오는 것으로 생각한다 :

Choose(8,1)*P(one set of 5 Xs) 
- Choose(8,2)*P(a set of 5 Xs and a set of 5 Ys) 
+ Choose(8,3)*P(5 Xs, 5 Ys, 5 Zs) 
- Choose(8,4)*P(5 Xs, 5 Ys, 5 Zs, 5 As)

P(set of 5 Xs) = 20 Choose 5 * 7^15 / 8^20
P(5 Xs, 5 Ys) = 20 Choose 5,5 * 6^10 / 8^20

등등. 이것은 5,6,7..20에 적용된 결과를 간단히 요약 한 것처럼 '동일하게 5 개 이상의 5 개 이상'의 문제를 직접 해결하지 못합니다. 당신은 당신이 10 1과 5 8을 보유한 경우를 과도하게 계산할 것입니다.

두 번째 답변을 제시하기 위해 포함 제외를 다시 적용 할 수 있습니다. 그래서, p (최소 5) = p (한 세트의 20 세트) + ... + (p (1 세트 15) -7*p (5 주사 14) -7*p (6에서 5의 1 세트) -7*p (6에서 6 세트 6). 소스 코드가 나오면 더욱 어려워지고 있습니다.

다른 팁

나는 당신이 몬테 카를로 시뮬레이션을 작성하고 수학을 손으로 해결하는 동안 실행하도록하는 데 약간의 시간을 소비하는 것이 좋습니다. Monte Carlo 시뮬레이션이 수학을 마치기 전에 수렴되며 솔루션을 확인할 수 있기를 바랍니다.

약간 더 빠른 옵션에는 수학 질문에 대한 복제품을 만드는 것이 포함될 수 있습니다.

정확한 확률 분포 fs, i s- 측 주사의 합의 I는 자체와 단일-다이 확률 분포의 반복적 인 컨볼 루션으로 계산 될 수 있습니다.

alt text

어디 alt text 모든 alt text 그리고 그렇지 않으면 0.

http://en.wikipedia.org/wiki/dice

이 문제는 일반화해야한다면 정말 어렵습니다 (정확한 공식을 얻으십시오).

그러나 어쨌든 알고리즘을 설명하겠습니다. 알고 싶다면

같은 가치의 정확히 5 주사위를 얻는 방법의 수

이전 문제를 다시 제출해야합니다

값 3의 정확히 5 주사위를 얻는 방법의 수를 계산하고 다른 값을 정확히 5 번 반복 할 수 없습니다.

단순화를 위해, Function F (20,8,5) (5 주사위, 모든 값)를 첫 번째 답을 호출하고 F (20,8,5,3) (5 주사위, 값 3) 두 번째 답변을 호출합시다. 우리는 그 f (20,8,5) = F (20,8,5,3) * 8 +를 가지고 있습니다. (하나 이상의 값이 5 번 반복되는 이벤트)

그래서 우리가 f (20,8,5,3)를 얻을 수 있다면 그것은 매우 간단하지 않습니까? 글쎄 ...별로 ...

먼저 일부 변수를 정의하겠습니다.x1, x2, x3 ..., xi, 여기서 xi = 주사위 I를 얻는 횟수

그 다음에:

F(20,8,5)/20^8 = P(X1=5 or X2=5 or ... or X8=5, with R=20(rolls) and N=8(dice number))

, P (Statement)는 확률을 쓰는 표준 방법입니다.

우리는 계속 :

F(20,8,5,3)/20^8 = P(X3=5 and X1<>5 and ... and X8<>5, R=20, N=8) 
F(20,8,5,3)/20^8 = 1 - P(X1=5 or X2=5 or X4=5 or X5=5 or X6=5 or X7=5 or X8=5, R=15, N=7)  
F(20,8,5,3)/20^8 = 1 - F(15,7,5)/7^15

재귀 적 :

F(15,8,5) = F(15,7,5,1) * 7  
P(X1=5 or X2=5 or X4=5 or X5=5 or X6=5 or X7=5 or X8=5, R=15, N=7) = P(X1=5 and X2<>5 and X4<>5 and .. and X8<>5. R=15, N=7) * 7

F(15,7,5,1)/7^15 = 1 - F(10,6,5)/6^10 F(10,6,5) = F(10,6,5,2) * 6

F(10,6,5,2)/6^10 = 1 - F(5,5,5)/5^5
F(5,5,5) = F(5,5,5,4) * 5

그럼 ... F (5,5,5,4)는 5 번의 다른 주사위를 5 번 반복하지 않는 5 롤에서 5 개의 값 4 다이스를 얻는 방법의 수입니다. 총 5^5 중 단 1 가지 방법이 있습니다. 확률은 1/5^5입니다.

F (5,5,5)는 5 개의 롤에서 5 개의 값 (5 값 중 5 개)을 얻는 방법의 수입니다. 분명히 5입니다. 확률은 5/5^5 = 1/5^4입니다.

F (10,6,5,2)는 다른 주사위가 5 번 반복되지 않는 것처럼 10 롤에서 5 개의 값 2를 얻는 방법의 수입니다. F (10,6,5,2) = (1-F (5,5,5)/5^5) * 6^10 = (1-1/5^4) * 6^10

글쎄 ... 나는 그것이 어떤 부분에서 잘못되었다고 생각하지만, 어쨌든, 당신은 아이디어를 얻습니다. 알고리즘을 이해할 수 있기를 바랍니다.

편집하다:나는 약간의 수표를했고, 정확히 5 번 반복 된 값을 반복 할 때 어떤 경우를 추가해야한다는 것을 깨달았습니다. 그 부분을 해결할 시간이 없어요 ...

여기 내가 생각하는 것이 있습니다 ...

5 개의 주사위를 가졌다면 원하는 것을 얻을 수있는 8 가지 방법 만 가질 수 있습니다.

그 8 가지 방법 각각에 대해, 다른 15 개의 주사위 작업의 가능한 모든 조합.

그래서 - 대답은 다음과 같습니다. (8 * 815) / 820

(적어도 5에 대한 답.)

N 이벤트에서 X 발생 공식을 사용할 수 있다고 생각합니다.

p = 확률^n * (n!/((n -x)! x!))))

따라서 최종 결과는 0에서 n까지의 결과의 합이 될 것입니다.

나는 그것을 덜 지저분한 한 단계로 결합하는 쉬운 방법을 실제로 보지 못합니다. 이런 식으로 코드에도 공식이 표시됩니다. 그래도 자신의 계승 방법을 작성해야 할 수도 있습니다.

  float calculateProbability(int tosses, int atLeastNumber) {
    float atLeastProbability = 0;
    float eventProbability = Math.pow( 1.0/8.0, tosses);
    int nFactorial = factorial(tosses);

    for ( i = 1; i <= atLeastNumber; i++) {
      atLeastProbability += eventProbability * (nFactorial / (factorial(tosses - i) * factorial(i) );
    }
  }

재귀 솔루션 :

Prob_same_value(n) = Prob_same_value(n-1) * (1 - Prob_noone_rolling_that_value(N-(n-1)))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top