Algorithm, Data structure/Basic concepts

Binomial coefficient

JaykayChoi 2016. 6. 23. 23:30

이항 계수(Binomial coefficient)는 n 개 에서 k 개를 고르는 (순서 없는)조합의 가짓수입니다. 이는 nCk 로 보통 표현하며 

이항 다항식  의 거듭제곱 에 대해서, 전개한 각 항  계수이기도 합니다.



 

 




그리고 위와 같이 점화식으로 표현할 수 있습니다.


따라서 이항 계수는 아래와 같은 방법으로 구할 수 있습니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const int MAX = 1000;
 
//memset(cache, -1, sizeof(cache))
int cache[MAX][MAX];
 
int getBinomialCoefficient(int n, int k)
{
    ///모든 원소를 다 고르는 경우 또는 고를 원소가 없는 경우
    if (n == k || k == 0)
        return 1;
 
    if (cache[n][k] != -1)
        return cache[n][k];
 
    return cache[n][k] = getBinomialCoefficient(n - 1, k - 1+ getBinomialCoefficient(n - 1, k);
}
cs


또는 factorial 을 직접 계산해서 구할 수도 있겠네요.


1
2
3
4
5
6
7
8
9
10
11
12
13
int factorial(int number)
{
    if (number <= 1)
        return 1;
    else
        return number * factorial(number - 1);    
}
 
int getBinomialCoefficient(int n, int k)
{
    return factorial(n) / factorial(n - k) / factorial(k);
}
 
cs




출처: https://en.wikipedia.org/wiki/Binomial_coefficient


'Algorithm, Data structure > Basic concepts' 카테고리의 다른 글

Sequential search, Binary search  (0) 2016.06.22