-
게임에서의 아이템 강화, n번 했을 때 성공할 확률은 어떻게 될까?프로그래밍/의문 2018. 2. 26. 18:50반응형
확률이 x%일 때 몇 번 시도해서 성공할 확률은 어떻게 구할지 궁금했다.
무언가를 테스트 할 때 성공, 실패 처럼 두 가지의 결과만 일어나는 테스트를 베르누이 시행이라고 말한다.
베르누이 시행의 분포 함수는
p^x * (1-p)^(1-x) // 단, x == 0 || x== 1
다만 베르누이 분포 함수 한 번의 시도에 대한 독립적인 확률이다.
c++ 코드로 풀면..
unsigned long long factorial(unsigned long long n){return n <= 1 ? 1 : n * factorial(n - 1);}// 베르누이 분포 함수// probability: 성공 확률// isSuccess: 성공 여부(0 == 실패)// output: 결과double calculateBernoulliProbability(double probability, bool isSuccess){double sval = isSuccess ? 1.0 : 0.0;return std::pow<double>(probability, sval) * std::pow<double>((1 - probability), 1.0 - sval);}n번 했을때의 x번 성공할 확률이 궁금했고 해당 확률을 구하는 건 이항 분포 함수인데(bidnomial distribution)
#include <iostream>#include <cmath>using namespace std;unsigned long long factorial(unsigned long long n){return n <= 1 ? 1 : n * factorial(n - 1);}// 이항 분포 함수// probability: 성공 확률(단, 0 <= probability <= 1.0)// tryCount: 시도 횟수// succCount: 기대 성공 횟수// output: 기대 성공 횟수의 확률double calculateBinomialProbabilityDistribution(double probability, int tryCount, int succCount){double a = factorial(tryCount) / (factorial(succCount) * factorial(tryCount - succCount));double b = std::pow<double>(probability, succCount) * std::pow<double>(1.0 - probability, tryCount - succCount);return a*b;}int main(){for (int i = 0; i != 10; ++i){double v = calculateBinomialProbabilityDistribution(0.1, 10, i);cout << i << " " << v << endl;}return 0;}반응형'프로그래밍 > 의문' 카테고리의 다른 글
tcmalloc은 비주얼 스튜디오에서 디버그모드로 실행 시 크래쉬를 일으킨다. (0) 2018.04.18 DB RETURN을 명시적으로 지정하지 않아 임의로 값이 바뀐 경우 (0) 2018.04.06 멀티플레이어 게임 프로그래밍 - 코드 오류 수정 (0) 2018.02.20 저장 프로시저 동시 호출로 인해 행 개수 조절에 실패한 경우 (0) 2017.12.19 비주얼 스튜디오, 64비트 테스트는 32비트 프로세스에서 실행할 수 없습니다. 오류 해결 (0) 2017.12.12