Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 배우는 이항 확률 변수: 개념부터 코드 구현까지

확률 변수(Random Variable)란 하나의 과정(process)이 여러 가지 결과를 낼 수 있는 확률을 가질 때, 그 결과값을 나타내는 변수를 말합니다. 예를 들어, 동전을 던졌을 때 '앞면' 또는 '뒷면'이라는 결과를 나타내는 변수가 대표적인 확률 변수입니다.

그중 이항 확률 변수(Binomial Random Variable)는 어떤 사건에서 특정 결과가 고정된 확률로 발생하는 상황과 관련된 값을 갖는 특수한 유형의 확률 변수입니다.

이항 확률 변수의 4가지 필수 조건

어떤 변수가 이항 확률 변수가 되기 위해서는 다음 네 가지 조건을 반드시 만족해야 합니다.

  • 고정된 시행 횟수 — 전체 시행(trial) 횟수가 미리 정해져 있어야 합니다.

  • 상반되는 두 가지 결과 — 각 시행의 결과는 참(True) 또는 거짓(False) 둘 중 하나여야 하며, 그 중간 값은 존재하지 않습니다.

  • 동일한 발생 확률 — 모든 시행에서 결과가 나타날 확률이 서로 같아야 합니다.

  • 시행 간의 독립성 — 어떤 시행의 결과가 다른 시행의 결과에 영향을 주어서는 안 됩니다.

이항 확률 변수의 확률 계산

이항 확률 변수에서 k번의 성공이 일어날 확률은 다음 공식으로 구할 수 있습니다.

P(x = k) = n! / (k! × (n−k)!) × pk × (1−p)n−k

여기서 각 기호의 의미는 다음과 같습니다.

  • n : 전체 시행 횟수

  • k : 성공 횟수

  • p : 한 번의 시행에서 성공할 확률

이 확률 분포를 바탕으로 이항 확률 변수의 기댓값(평균)분산도 구할 수 있습니다.

E[X] = np

성공 횟수의 분산은 다음과 같습니다.

Var[X] = np(1−p)

C++ 구현 예제

다음은 C++로 이항 확률을 계산하는 프로그램입니다. 동전을 10번 던졌을 때 앞면이 정확히 5번 나올 확률(앞면이 나올 확률이 1/3인 경우)을 구합니다.

#include <iostream>
#include <cmath>
using namespace std;

// 조합(combination) nCr 을 계산하는 함수
int combination(int n, int r){
    if (r > n / 2)
        r = n - r;
    int answer = 1;
    for (int i = 1; i <= r; i++) {
        answer *= (n - r + i);
        answer /= i;
    }
    return answer;
}

// 이항 확률을 계산하는 함수
float randombinomialProbability(int n, int k, float p){
    return combination(n, k) * pow(p, k) * pow(1 - p, n - k);
}

int main(){
    int n = 10;          // 전체 시행 횟수
    int k = 5;           // 성공(앞면) 횟수
    float p = 1.0 / 3;   // 한 번의 시행에서 성공할 확률

    float binomialRandomVariable = randombinomialProbability(n, k, p);

    cout << "Probability of " << k;
    cout << " heads when a coin is tossed " << n;
    cout << " times where probability of each head is " << p;
    cout << " is = " << binomialRandomVariable << endl;

    return 0;
}

실행 결과

Probability of 5 heads when a coin is tossed 10 times where probability of each head is 0.333333 is = 0.136565

실행 결과를 보면, 앞면이 나올 확률이 약 33.33%인 동전을 10번 던졌을 때 정확히 5번 앞면이 나올 확률은 약 13.66%(0.136565)임을 확인할 수 있습니다. 이처럼 이항 확률 변수는 동전 던지기, 품질 검사, 설문 조사 등 성공/실패로 구분되는 다양한 실제 문제에 활용됩니다.