📅  最后修改于: 2023-12-03 15:39:57.597000             🧑  作者: Mango
广义 PnC (Permutations and Combinations) 可以理解为对于一个集合中的 n 个元素,从中取出 m 个元素,共有多少种取法。这里的元素可以是不同的,也可以是相同的。
常见的 PnC 公式为:
$$ \begin{aligned} C_n^m &= \frac{n!}{m!(n-m)!} \ P_n^m &= \frac{n!}{(n-m)!} \end{aligned} $$
其中 $C_n^m$ 表示从 n 个元素中取出 m 个元素的组合数, $P_n^m$ 表示从 n 个元素中取出 m 个元素的排列数。
但是,在现实生活中,有时候我们需要将这些元素划分成不同的组别,每个组别都可以取出其中的若干元素,这时候就需要用到广义 PnC。
假设有 $k$ 个不同的集合 $S_1, S_2, \cdots, S_k$,对于第 $i$ 个集合 $S_i$,其中有 $n_i$ 个元素,那么从这 $k$ 个集合中各取出 $m_i (0 \leq m_i \leq n_i)$ 个元素,构成一个集合 $T$。
例如,假设有三个集合 $S_1 = {A, B}$,$S_2 = {C, D, E}$,$S_3 = {F, G}$,现在需要从这三个集合中分别取出 1, 2, 1 个元素,构成一个新的集合 $T$,那么 $T$ 可以有如下 ${2 \choose 1} \times {3 \choose 2} \times {2 \choose 1} = 12$ 种不同的取法(即每个集合选择哪些元素):
我们可以用 $\langle m_i \rangle_{i=1}^k$ 来表示一个集合的取法:
$$ \langle m_i \rangle_{i=1}^k = {x_i \in S_i | x_i \text{的数量为} m_i} $$
例如,如果 $\langle m_1, m_2, m_3 \rangle = \langle 1, 2, 1 \rangle$,则表示从 $S_1, S_2, S_3$ 中分别取出 1, 2, 1 个元素。
给定 $k$ 个集合 $S_1, S_2, \cdots, S_k$,对于第 $i$ 个集合 $S_i$,其中有 $n_i$ 个元素,从这 $k$ 个集合中分别取出 $m_i (0 \leq m_i \leq n_i)$ 个元素,共有多少种取法。
考虑每个集合 $S_i$ 如何取数:
所以,对于第 $i$ 个集合,一共有 ${n_i \choose m_i}$ 种取法。
最终,由于这 $k$ 个集合是互相独立的,所以总共的取法是它们的积:
$$ \prod_{i=1}^k {n_i \choose m_i} $$
这里的 ${n_i \choose m_i}$ 表示从 $S_i$ 中取出 $m_i$ 个元素的组合数。
广义 PnC 在组合计数中有广泛的应用,比如: