-
[Algorithm] 이항계수Algorithm 2022. 4. 23. 14:39728x90
이항계수
조합론에서 이항계수는 이항식을 이항 정리로 전개했을 때 각 항의 계수이다. 각 항의 계수는 주어진 크기에서 순서없는 조합의 가짓수이다.
이항계수는 위와 같다. 이때 이항계수는 nCk나 C(n, k)로 쓰기도 한다.
이항계수는 위의 공식을 사용하여 factorial을 사용해 구할 수도 있고 파스칼의 삼각형을 이용한 동적계획법 알고리즘으로 구할 수 있다.
파스칼의 삼각형
이항계수만을 작성해보면 다음과 같이 삼각형의 형태로 작성할 수 있다. 여기서 이항계수간의 관계를 발견할 수 있다.
nCk = n-1Ck-1 + n-1Ck
위와같은 점화식이 성립한다. 파스칼의 삼각형을 이용하여 다이나믹프로그래밍의 메모이제이션 방식으로 쉽게 이항계수를 구할 수 있다.
Python
다이나믹 프로그래밍 방식 >
import sys n, k = map(int, sys.stdin.readline().split()) dp = [[0 for _ in range(n+1)] for _ in range(n+1)] for i in range(n+1): for j in range(n+1): if j == 0: dp[i][j] = 1 elif i == j: dp[i][j] = 1 elif j == 1: dp[i][j] = i elif n >= k: dp[i][j] = dp[i-1][j-1] + dp[i-1][j] print(dp[n][k]) #nCk
728x90