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

C++ negative_binomial_distribution 완벽 정리: 개념부터 예제 코드까지

이 튜토리얼에서는 C++의 negative_binomial_distribution을 이해할 수 있는 예제 프로그램을 다룹니다.

negative_binomial_distribution은 음이항 이산 분포를 따르며, 이 확률 분포에 기반해 정수형 난수를 생성하는 클래스입니다. 통계학적으로 음이항 분포는 독립적인 베르누이 시행에서 k번째 성공이 나타나기 전까지 발생한 실패 횟수를 모델링하며, 매개변수 k(성공 횟수)와 p(성공 확률)에 의해 분포의 형태가 결정됩니다.

예제 코드

#include <bits/stdc++.h>
using namespace std;
int main() {
    // 실험 횟수 설정
    const int exps = 10000;
    const int numberstars = 100;
    default_random_engine generator;
    negative_binomial_distribution<int> distribution(4, 0.5);
    int p[10] = {};
    for (int i = 0; i < exps; ++i) {
        int counting = distribution(generator);
        if (counting < 10)
            ++p[counting];
    }
    cout << "Negative binomial distribution with "<< "( k = 4, p = 0.5 ) :" << endl;
    // 배열에 저장된 빈도를 별(*) 개수로 변환하여 출력
    for (int i = 0; i < 10; ++i)
        cout << i << ": " << string(p[i] * numberstars / exps, '*') << endl;
    return 0;
}

코드 설명

  • exps = 10000 : 총 10,000회의 난수 추출 실험을 수행합니다.
  • distribution(4, 0.5) : 성공 횟수 k=4, 성공 확률 p=0.5인 음이항 분포 객체를 생성합니다.
  • p[10] : 0부터 9까지 각 값이 몇 번 나왔는지 빈도를 저장하는 배열입니다.
  • numberstars = 100 : 빈도를 별(*) 문자로 시각화할 때 사용되는 배율 값입니다.

출력 결과

Negative binomial distribution with ( k = 4, p = 0.5 ) :
0: *****
1: ************
2: ****************
3: ***************
4: *************
5: **********
6: ********
7: *****
8: ***
9: **

실행 결과를 보면 값이 3 근처에서 가장 자주 발생하고, 값이 커질수록 발생 빈도가 점차 감소하는 것을 확인할 수 있습니다. 이는 k=4, p=0.5일 때 음이항 분포의 평균이 k(1-p)/p = 4, 최빈값(mode)이 약 3 부근에 위치하기 때문입니다. 이처럼 히스토그램 형태로 결과를 시각화하면 확률 분포의 특성을 직관적으로 파악할 수 있습니다.