组合数学

约定:如非特殊说明,本文所涉及的数均为非负整数.

基本概念

阶乘

对于任意非负整数 \(n\),称 \(n\times(n-1)\times(n-2)\times\cdots\times3\times2\times1\)\(n\)阶乘,记作 \(n!\),即

\[n!=n\times(n-1)\times(n-2)\times\cdots\times3\times2\times1. \]

特别地,\(0!=1\)

分类加法计数原理

完成一件事有两类不同方案,在第 \(1\) 类方案中有 \(m\) 种不同的方法,在第 \(2\) 类方案中有 \(n\) 种不同的方法,那么完成这件事共有

\[N=m+n \]

种不同的方法.

分步乘法计数原理

完成一件事需要两个步骤,做第 \(1\) 步有 \(m\) 种不同的方法,做第 \(2\) 步有 \(n\) 种不同的方法,那么完成这件事共有

\[N=m\times n \]

种不同的方法.

排列

\(n\) 个不同元素中取出 \(m\)\(m\le n\))个元素,并按照一定的顺序排成一列,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的一个排列

两个排列相同的充要条件是:两个排列的元素完全相同,且元素的排列顺序也相同.

\(n\) 个不同元素中取出 \(m\)\(m\le n\))个元素的所有不同排列的个数,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的排列数,用符号 \(A_{n}^{m}\) 表示(\(A\) 是 arrangement 的第一个字母).

对于 \(A_{n}^{m}\) 的计算,我们可以将其考虑为依次填 \(m\) 个空位:

  • \(1\) 位可以填 \(n\) 种;
  • \(2\) 位可以填 \((n-1)\) 种;
  • \(3\) 位可以填 \((n-2)\) 种;
  • ……
  • \(m\) 位可以填 \((n-m+1)\) 种.

根据分步乘法计数原理,总的填法种数为 \(n(n-1)(n-2)\cdots(n-m+1)\)

所以

\[A_{n}^{m}=n(n-1)(n-2)\cdots(n-m+1)=\frac{n!}{(n-m)!}. \]

特别地,\(n\) 个不同的元素全部取出的一个排列,叫做 \(n\) 个元素的一个全排列,即 \(n=m\),不难得到

\[A_{n}^{n}=n!. \]

组合

\(n\) 个不同元素中取出 \(m\)\(m\le n\))个元素为一组,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的一个组合

从排列与组合的定义可以知道,两者都是从 \(n\) 个元素中取出 \(m\)\(m\le n\))个元素,但排列与元素的顺序有关,而组合与元素的顺序无关.所以可知两个组合相同的充要条件是两个组合的元素完全相同.

\(n\) 个不同元素中取出 \(m\)\(m\le n\))个元素的所有不同组合的个数,叫做从 \(n\) 个不同元素中取出 \(m\) 个元素的组合数,用符号 \(C_{n}^{m}\)\(\dbinom{n}{m}\) 表示(\(C\) 是 combination 的第一个字母,下文中简洁直观起见,采用第 \(2\) 种写法).

对于 \(\dbinom{n}{m}\) 的计算,考虑求 \(A_{n}^{m}\) 的过程,可以分为

  • \(n\) 个元素中选出 \(m\) 个元素作为一组,共 \(\dbinom{n}{m}\) 种;
  • 将取出的 \(m\) 个元素作全排列,共 \(A_{m}^{m}\) 种.

根据分步乘法计数原理,可得

\[A_{n}^{m}=\binom{n}{m}\cdot A_{m}^{m} \]

\[\binom{n}{m}=\frac{A_{n}^{m}}{A_{m}^{m}}=\frac{n!}{m!(n-m)!}. \]

组合数的简单性质

组合数具有很多优美的性质,这些性质对于加深对计数原理的理解和解决更加复杂的问题有很大帮助.

组合等式的证明通常有组合意义和代数推导两种方式.

下面会给出若干等式,较为显然的代数推导将会略过,请读者自行验证.


\[\binom{n}{m}=\binom{n}{n-m}.\tag{1} \]

\(n\) 个不同元素中取出 \(m\) 个元素后,必然剩下 \((n-m)\) 个元素,因此 \(n\) 个不同元素的取出 \(m\) 个元素的组合总是能与剩余的 \((n-m)\) 个元素的组合一一对应.


\[\binom{n+1}{m}=\binom{n}{m}+\binom{n}{m-1}.\tag{2} \]

\(n+1\) 个不同元素中取出 \(m\) 个元素,相当于直接从前 \(n\) 个元素中取出 \(m\) 个元素,或者先从前 \(n\) 个元素中取出 \(m-1\) 个元素,再把第 \(n+1\) 个元素加入,由分类加法计数原理可得.


\[\binom{n}{m}=\frac{n}{m}\binom{n-1}{m-1}.\tag{3} \]

\(n\) 个不同元素中取出 \(m\) 个元素,并从这 \(m\) 个元素中选出 \(1\) 个代表,共 \(m\cdot\dbinom{n}{m}\) 种方案.

也可以先从 \(n\) 个不同元素中选出 \(1\) 个代表,再从剩余 \(n-1\) 个不同元素中选出剩余 \(m-1\) 个元素,共 \(n\cdot\dbinom{n-1}{m-1}\) 种方案.二者写成等式后移项即可得到 \((3)\) 式.


\[\sum_{i=0}^n\binom{n}{i}=2^n.\tag{4} \]

含有 \(n\) 个元素的集合的子集数.


\[\binom{n}{m}\binom{m}{k}=\binom{n}{k}\binom{n-k}{m-k}.\tag{5} \]

\(n\) 个不同元素中先取出 \(m\) 个元素,再从这 \(m\) 个元素中取出 \(k\) 个元素.也可以先从 \(n\) 个人中取出 \(k\) 个元素,再从剩余 \(n-k\) 个元素中取出 \(m-k\) 个元素以补齐 \(m\) 个元素.


\[\sum_{i=m}^n\binom{i}{m}=\binom{n+1}{m+1}.\tag{6} \]

这个式子叫做上指标求和公式.证明考虑将求和式的第一项 \(\dbinom{m}{m}\) 改为与之相等的 \(\dbinom{m+1}{m+1}\),然后不断将前两项用 \((2)\) 式合并,最终可以得到 \(\dbinom{n+1}{m+1}\)


\[\sum_{i=0}^ni\binom{n}{i}=n2^{n-1}.\tag{7} \]

首先处理 \(i\dbinom{n}{i}\)

\[\begin{aligned} i\binom{n}{i}&=i\cdot\frac{n!}{i!(n-i)!}\\ &=n\cdot\frac{(n-1)!}{(i-1)!(n-i)!}\\ &=n\binom{n-1}{i-1}. \end{aligned}\]

\(j=i-1\),有:

\[\sum_{i=0}^ni\binom{n}{i}=n\sum_{j=0}^{n-1}\binom{j}{n-1}=n2^{n-1}. \]


这些等式对于复杂的组合式化简也有着重要作用,一些应用将会在后文展开描述.

隔板法

问题一:

现有 \(n\) 个相同的球和 \(m\) 个不同的盒子(\(n\ge m\)),将这 \(n\) 个球放入 \(m\) 个盒子中,每个盒子至少放 \(1\) 个球,有多少种方法?

考虑将 \(m-1\) 块隔板放在 \(n\) 个元素形成的 \(n-1\) 个空隙内,每个空隙最多放一块隔板,这样我们就实现了一个合法的分配.这种方式显然可以实现任意一种合法分配.所以原问题的答案即为

\[\binom{n-1}{m-1}. \]

问题二:

在问题一的基础上,每个盒子允许为空.如果沿用刚才的方法,每个空隙中就可能要放多个隔板,计算困难.考虑转化为问题一,先借 \(m\) 个球,在 \(n+m-1\) 个空隙里放隔板.则答案为

\[\binom{n+m-1}{m-1}=\binom{n+m-1}{n}. \]

在放完板后,我们从每一个盒子里再拿走 \(1\) 个球,即可得到一个合法的问题二的方案.因为所有球都相同,所以这和转化前的情况可以一一对应.

问题三:

在问题一的基础上,第 \(i\) 个盒子至少放 \(a_i\) 个球(\(\sum a_i\le n\)).

类比问题二的解法,先借 \(\sum a_i\) 个球,问题就转化为了问题二,答案为

\[\binom{n-\sum a_i+m-1}{n-\sum a_i}. \]

二项式定理

\[(x+y)^n=\sum_{i=0}^n\binom{n}{i}x^iy^{n-i}.\tag{8} \]

\((8)\) 式即为二项式定理.其中 \(x,y\) 可以是复数.各项的系数 \(\dbinom{n}{i}\) 叫做二项式系数

证明一:

原式即为 \(n\)\((x+y)\) 相乘,二项式展开事实上是从每个 \((x+y)\) 中选择一个 \(x\)\(y\)

接下来考虑 \(x^iy^{n-i}\) 这一项,即在 \(n\)\((x+y)\) 中选出 \(i\) 个组成 \(x^i\),剩余 \(n-i\) 个组成 \(y^{n-i}\),不难得出这一项的系数应为 \(\dbinom{n}{i}\)

证明二:

考虑数学归纳法.

\(n=1\) 时,等式左边为 \(x+y\).等式右边为 \(\dbinom{1}{0}x^1y^0+\dbinom{1}{1}x^0y^1=x+y\).等式成立.

假设 \(n=k\) 时等式成立,即:

\[(x+y)^k=\sum_{i=0}^k\binom{k}{i}x^iy^{k-i}. \]

\(n=k+1\) 时:

\[\begin{aligned} (x+y)^{k+1}&=(x+y)\cdot(x+y)^k\\ &=(x+y)\sum_{i=0}^k\binom{k}{i}x^iy^{k-i}\\ &=\sum_{i=0}^k\binom{k}{i}x^{i+1}y^{k-i}+\sum_{i=0}^k\binom{k}{i}x^iy^{k-i+1}\\ &=\sum_{i=0}^{k+1}\binom{k+1}{i}x^iy^{k+1-i}. \end{aligned}\]

其中,最后一步推导利用了上文提到的 \((2)\) 式用于对其下标和合并.

故得证.

杨辉三角

将二项式系数排成三角形,这样的图形就是杨辉三角.

由杨辉三角,我们可以重新理解一下上文提到的若干式子.

杨辉三角是轴对称图形,所以 \((1)\) 式成立.

杨辉三角每个元素等于其上方两个元素之和,所以 \((2)\) 式成立.这也是计算杨辉三角的基本方法.

杨辉三角第 \(i\) 行之和即为 \((4)\) 式.第 \(i\) 列前缀和即为 \((6)\) 式.

杨辉三角还有一个有趣的性质:将三角形左端对齐后,沿右斜 \(45\) 度对角线方向取得数之和为斐波那契数.但这个性质对于计数问题意义不大,这里不做进一步探讨.

多重集的排列数

多重集是包含重复元素的广义集合.\(S=\{n_1\cdot a_1,n_2\cdot a_2,\cdots,n_k\cdot a_k\}\) 表示由 \(n_1\)\(a_1\)\(n_2\)\(a_2\),…,\(n_k\)\(a_k\) 组成的多重集.若令 \(n=n_1+n_2+\cdots+n_k\),即 \(n\) 为集合中元素总数,\(S\) 的全排列个数为:

\[\frac{n!}{n_1!n_2!\cdots n_k!}=\frac{n!}{\prod_{i=1}^kn_i!}. \]

相当于首先将 \(n\) 个元素做全排列,然后通过除 \(n_i!\) 消除第 \(i\) 种元素之间的顺序性.这就是多重集的排列数,也叫多重组合数,记作 \(\dbinom{n}{n_1,n_2,\cdots,n_k}\).即

\[\binom{n}{n_1,n_2,\cdots,n_k}=\frac{n!}{\prod_{i=1}^kn_i!}. \]

以下是多重集排列数的性质:

组合数可以与之对应:

\[\binom{n}{m}=\binom{n}{m,n-m}. \]

没什么特殊含义,只是换个写法而已.

多项式定理:

\[(x_1+x_2+\cdots+x_m)^n=\sum_{k_1+k_2+\cdots+k_m=n}\binom{n}{k_1,k_2,\cdots,k_m}x_1^{k_1}x_2^{k_2}\cdots x_m^{k_m}. \]

与二项式定理类似,多项式定理的 \(x_i\) 可以是复数.事实上,二项式定理就是多项式定理在 \(m=2\) 的特例.可以类比二项式定理的组合意义证法或对 \(m\) 归纳证明,这里不展开介绍.

范德蒙德卷积

\[\sum_{i=0}^k\binom{n}{i}\binom{m}{k-i}=\binom{n+m}{k}.\tag{9} \]

这个式子叫做范德蒙德卷积.

证法一:

注意到

\[(x+1)^n(x+1)^m=(x+1)^{n+m}. \]

等号左边可变为:

\[\begin{aligned} (x+1)^n(x+1)^m&=\left(\sum_{i=0}^n\binom{n}{i}x^i\right)\left(\sum_{j=0}^m\binom{m}{j}x^j\right)\\ &=\sum_{k=0}^{n+m}\left(\sum_{i=0}^k\binom{n}{i}\binom{m}{k-i}\right)x^k. \end{aligned}\]

等号右边可变为:

\[(x+1)^{n+m}=\sum_{k=0}^{n+m}\binom{n+m}{k}x^k. \]

比较 \(x^k\) 的系数即证.

证法二:

从大小为 \(n+m\) 的集合中选出 \(k\) 个元素,等式两边分别表示:

  • 将集合分为大小分别为 \(n,m\) 且互补的两子集,从大小为 \(n\) 的子集中选 \(i\) 个,再从大小为 \(m\) 的子集中选 \(k-i\) 个,考虑 \(i=0,1,2,\cdots,k\) 的情况.

  • 直接选.

容斥原理

对于任意个有限集合 \(S_1,S_2,\cdots,S_n\),它们的并集的大小满足:

\[\left|\bigcup_{i=1}^nS_i\right|=\sum_{m=1}^n(-1)^{m-1}\sum_{a_i<a_{i+1} }\left|\bigcap_{i=1}^mS_{a_i}\right| \]

更加容易理解的一个形式是这样的:

\[\left|\bigcup_{i=1}^nS_i\right|=\sum_{i=1}^n|S_i|-\sum_{1\le i<j\le n}|S_i\cap S_j|+\sum_{1\le i<j<k\le n}|S_i\cap S_j\cap S_k|-\cdots \]

其中第 \(i\) 项的符号为 \((-1)^{i+1}\)

证明一:

若元素 \(x\) 属于 \(S_1,S_2,\cdots,S_n\) 中的 \(m\) 个集合(\(0<m\le n\)),其在等式左边被计数 \(1\) 次,在等式右边被计数

\[\binom{m}{1}-\binom{m}{2}+\cdots+(-1)^{m+1}\binom{m}{m} \]

次.由二项式定理,原式可化为

\[\binom{m}{0}-\sum_{i=0}^m(-1)^i\binom{m}{i}=1-(1-1)^m=1. \]

证毕.

证明二:

使用数学归纳法,大致思路是构造归纳时利用 \(n=2\) 时的结论进行拆分.具体证明过程较为冗长,这里略过.

错位排列

错位排列是没有任何元素出现在其有序位置的排列.对于 \(1\sim n\) 的排列 \(p\),如果满足 \(p_i\ne i\),则称 \(p\) 是错位排列.

\(n\) 个元素的错排数记作 \(D_n\),对于 \(D_n\) 的计算,常见的有两种方法:

方法一:

考虑从 \(n-1\) 个元素的情况递推到 \(n\) 个元素的情况,我们暂时把第 \(n\) 个元素放在第 \(n\) 个位置:

  • 如果前 \(n-1\) 个元素已经构成错排,那么将第 \(n\) 个元素与前 \(n-1\) 个元素的任意一个交换位置即可生成长度为 \(n\) 的错排,共 \((n-1)D_{n-1}\) 种方案.

  • 如果前 \(n-1\) 个元素中一个元素满足 \(p_i=i\) 而其他元素不满足,则令第 \(n\) 个元素与 \(i\) 交换位置即可,共 \((n-1)D_{n-2}\) 种方案.

其他情况不可能通过一次操作将原排列变为错排.

所以有

\[D_n=(n-1)(D_{n-1}+D_{n-2}). \]

方法二:

考虑容斥.存在至少 \(k\) 个位置满足 \(p_i=i\) 的方案数为 \(\dbinom{n}{k}(n-k)!\).不难写出容斥:

\[\begin{aligned} D_n&=\sum_{i=0}^n(-1)^i\binom{n}{i}(n-i)!\\ &=n!\sum_{i=0}^n\frac{(-1)^i}{i!}. \end{aligned}\]

圆排列

\(n\) 个不同元素中选出 \(r\) 个元素排列成一个圆的形状就叫做圆排列.圆排列的排列数记作 \(Q_{n}^{r}\)

对于任意一个圆排列,其从任意位置断开都可以唯一对应一个线性排列,所以有

\[Q_{n}^{r}=\frac{A_{n}^{r}}{r}=\frac{n!}{r\cdot(n-r)!}. \]

卡特兰数

卡特兰数是计数问题中常用的一个数列,记作 \(C_n\)\(C_n\) 的值可以用以下这些问题描述:

  • \(n\) 对括号组成的合法括号序列数.

  • \(n\)\(1\)\(n\)\(-1\) 组成的数列中,满足任意位置前缀和大于等于 \(0\) 的数列数目.

  • 一个栈的入栈序列为 \(1,2,3,\cdot,n\),合法出栈序列数.

可以证明以上这些问题等价.

由组合意义不难得到

\[C_n= \begin{cases} 1,& n=0,\\ \sum_{i=0}^{n-1}C_iC_{n-i-1},&n\ge 1. \end{cases}\]

但是这个式子较为复杂.接下来将给出更为简洁的计算方法.

事实上,有

\[C_n=\binom{2n}{n}-\binom{2n}{n-1}. \]

以下是证明过程:

引理:方格图中,每次只能向右或向上走.从 \((0,0)\)(左下角)走到 \((n,m)\)(右上角)的方案数为

\[\binom{n+m}{n}=\binom{n+m}{m}. \]

证明考虑总步数一定为 \(n+m\),其中选出 \(n\) 步向右,剩余 \(m\) 步向上.

\(C_n\) 可以表述为:方格图中,每次只能向右或向上走.从 \((0,0)\) 走到 \((n,n)\) 且路径不经过直线 \(y=x\) 上方(但可以触碰).

\((0,0)\) 走到 \((n,n)\) 的总方案数为 \(\dbinom{2n}{n}\).那么只需计算出不合法的方案数即可.

显然所有不合法的方案都至少触碰过一次直线 \(y=x+1\)

对于所有不合法的路径,我们在其第一次触碰到直线 \(y=x+1\) 后的每一步都沿直线 \(y=x+1\) 对称,即向右变为向上,向上变为向右,那么原本的终点 \((n,n)\) 就变为了 \((n-1,n+1)\),这样,每一条能到达 \((n-1,n+1)\) 的路径都可以与一条能到达 \((n,n)\) 且不合法的路径一一对应,那么不合法的方案数就是 \(\dbinom{2n}{n-1}\)

这个方法叫做反射容斥.

下图展示了 \(n=6\) 时的一个情况,其中橘色直线是 \(y=x\),黄色直线是 \(y=x+1\),红色路径是一条合法路径,绿色路径是一条不合法路径,蓝色路径是绿色路径的“反射”.

posted @ 2025-07-19 15:43  headless_piston  阅读(19)  评论(0)    收藏  举报