📜  二项式系数 | DP-9(1)

📅  最后修改于: 2023-12-03 15:21:41.034000             🧑  作者: Mango

二项式系数 | DP-9

简介

二项式系数是组合数学中一个常见的概念,是指从 $n$ 个不同元素中选取 $k$ 个元素的组合数。一般表示为 $\binom{n}{k}$。

计算二项式系数的常见方法有:组合公式、递推公式、杨辉三角等。其中,递推公式使用动态规划的思想,可以在 $O(n^2)$ 的时间复杂度内计算出所有的二项式系数。

递推公式

设 $B_{i,j}$ 表示从 $i$ 个不同元素中选取 $j$ 个元素的组合数,则有以下递推公式:

$$ B_{i,j}= \begin{cases} 1, & j=0~\text{or}~i=j \ B_{i-1,j-1}+B_{i-1,j}, & 0<j<i \end{cases} $$

其中,第一行表示当 $j=0$ 或 $i=j$ 时,组合数为 1;第二行表示当 $0<j<i$ 时,从 $i$ 个元素中选取 $j$ 个元素的组合数可以拆分成两种情况:选第 $i$ 个元素和不选第 $i$ 个元素。

代码实现
def binomial_coefficient(n, k):
    """
    计算二项式系数
    :param n: 元素个数
    :param k: 挑选元素个数
    :return: 二项式系数
    """
    dp = [[0] * (k + 1) for _ in range(n + 1)]
    for i in range(n + 1):
        for j in range(min(i, k) + 1):
            if j == 0 or i == j:
                dp[i][j] = 1
            else:
                dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]
    return dp[n][k]
示例
assert binomial_coefficient(5, 2) == 10
assert binomial_coefficient(10, 5) == 252
assert binomial_coefficient(20, 10) == 184756