组合数学学习笔记(upd 2025.12.29)
组合数学学习笔记
排列组合
排列组合的定义
排列:\(A_n^m=\large \frac{n!}{(n-m)!}\)
组合:\(\large \binom{n}{m}=\frac{n!}{m!(n-m)!}\)
插板法
这个东西非常重要
核心思想是转化问题为往空位中插入板子;
主要难点是刻画题目限制(显然);
Instance 1:正整数数目和
问题:现在有 \(n\) 个完全相同的元素,要求把这些元素分成 \(m\) 组,并且每组非空,求本质不同方案数。
可以把问题转化为:往 \(n-1\) 个空位中插入 \(m-1\) 个板子,因此答案是 \(\binom{n-1}{m-1}\);
这个也是方程 \(\sum \limits_{i=1}^n x_i =m\) 的正整数解数。
Instance 2:非负整数数目和
问题:现在有 \(n\) 个完全相同的元素,要求把这些元素分成 \(m\) 组,并且每组可以为空,求本质不同方案数。
考虑怎么刻画“空组”:可以加入 \(m\) 个元素,这 \(m\) 个元素当作空位;因为所有元素完全相同,我们可以当作每一组中都有且仅有一个空位。那么这样每一种插板方案都唯一对于一种原来的合法方案。
因此答案是 \(\binom{n+m-1}{m-1}=\binom{n+m-1}{n}\)。
这个也是方程 \(\sum \limits_{i=1}^n x_i =m\) 的非负整数解数。
Instance 3:带下界的数目和
问题:现在有 \(n\) 个完全相同的元素,要求把这些元素分成 \(m\) 组,并且第 \(i\) 组至少分到 \(a_i\),求本质不同方案数。
既然要求至少分到若干个,那就先分出去给它嘛:那么就剩下 \(n-\sum \limits_{i=1}^na_i\) 个物品,套用例二的式子,也就是 \(\binom{n-\sum \limits_{i=1}^n a_i +m-1}{m-1}\)。
这个也是方程 \(\sum \limits_{i=1}^n x_i =m\) 的满足 \(\forall_{1\le i\le n}x_i \ge a_i\) 的解数。
Instance 4:不相邻的排列
可以转化为例二的情况。
二项式定理
然OIer不需要证明
多重组合数
问题:给定包含 \(n\) 个元素的可重集 \(S\),求 \(S\) 的全排列数。
考虑元素互不相同时,全排列为 \(n!\);因为对于相同的元素,调整先后顺序后排列本质相同,因此需要除去相同元素的全排列数。
令 \(a_i\) 表示 \(x_i\) 的个数,那么 \(S\) 的全排列为 \(\large \frac{n!}{\prod_ia_i}\)。
这样的 \(S\) 的全排列数被称为多重组合数,可以表示为 \(\binom{n}{n_1,n_2,\cdots,n_k}\)。
二项式推论
由公式可以简单推出。实际意义就是对原来每一个集合取补集。
这个是杨辉三角的递推式。可以用在 \(O(n^2)\) 求组合数。
将 \(a=1,b=1\) 带入二项式定理就行。
将 \(a=1,b=-1\) 带入二项式定理即可。
这是范德蒙恒等式,下面给出一种证明:考虑从两个无交集合 \(A\) 和 \(B\) 中取 \(k\) 个元素,其中 \(A\) 的大小为 \(n\),\(B\) 的大小为 \(m\),方案数显然为 \(\binom{n+m}{k}\)。考虑枚举 \(A\) 中取了 \(i\) 个元素,那么方案数为 \(\binom{n}{i}\binom{m}{k-i}\),求和后即得证。
这是范德蒙恒等式当 \(n=m=k\) 的特殊情况。
可以通过对二项式定理求导证明,给出组合意义:考虑等式左边其实是:大小为 \(n\) 的集合的所有子集的大小之和。在这个情景下,考虑每一个元素的贡献:钦定选取它,然后其他 \(n-1\) 个元素可以任选,也就是被计算了 \(2^{n-1}\) 次。那么所有元素的贡献和为 \(n2^{n-1}\),证毕。
还是可以通过对二项式定理求导证明,给出组合意义:考虑等式左边其实是:大小为 \(n\) 的集合的所有子集的大小平方之和。大小平方之和可以转化为选取有序对 \((x,y)\) 的方案数。由此考虑每一个有序对的贡献:
-
如果 \(x=y\):那么其他 \(n-1\) 个元素情况任意,贡献为 \(2^{n-1}\),有 \(n\) 个这样的有序对;
-
如果 \(x\neq y\):那么其他 \(n-2\) 个元素任意,贡献为 \(2^{n-2}\),有 \(n(n-1)\) 个这样的有序对;
总方案数为 \(n2^{n-1}+n(n-1)2^{n-2}=n(n+1)2^{n-2}\),证毕。
这是朱世杰恒等式。证明:考虑将一个大小为 \(n+1\) 的集合取出 \(k+1\) 个不同元素的方案数,那么可以钦定选取元素中下标最大值,然后再从剩余的任意选 \(k\) 个。
其中 \(F\) 是斐波那契数列。证明:考虑斐波那契数列的组合意义:从数 \(0\) 出发,一次可以加 \(1\) 或加 \(2\),得到 \(n\) 的方案数就是 \(F_n\)。那么其实考虑上述形式的另一种计算方式:钦定加 \(2\) 的次数为 \(i\),那么总操作次数一定为 \(n-2i\),那么方案数就是在 \(n-2i\) 次操作中选 \(i\) 次为加 \(2\),也就是 \(\binom{n-i}{i}\)。
同时展开两边即可证明。
容斥相关
容斥原理
设全集 \(U\) 中有 \(n\) 种不同的属性,拥有第 \(i\) 种属性的元素集合为 \(S_i\),那么有:
证明:考虑每一个元素的贡献,假设它一共有 \(m\) 种属性,选择其中 \(k\) 个集合的方案数是 \(\binom{m}{k}\),贡献系数为 \((-1)^{k-1}\),那总贡献就是:
Min-Max 容斥
记 \(\{x_i\}\) 是一个大小为 \(n\) 的元素间满足全序关系且具有加减性的元素列,\(S=\{i|i\in[0,n-1]\cap Z\}\)。Min-Max 容斥的一般形式如下:
注意到两式形式类似,所以这里只证明最大值形式(第一个):考虑第 \(k\) 大元素的贡献,那么钦定它做最小值,那么还可以选 \(k-1\) 个元素。考虑这个元素的贡献系数:
结论:当前仅当 \(k=1\) 时(即选到最大值时)贡献系数为 \(1\)。
二项式反演
把它单独提出来是因为它又难又重要,而且考的频率还算中等。
一维至多形式
设 \(f_n\) 表示恰好选取 \(n\) 个元素形成特定结构的方案数,\(g_n\) 表示至多选取 \(n\) 个元素形成特定结构的方案数,显然有:
但是如果此时知道 \(g\) 想要反求 \(f\) 呢?那么也有式子:
已知 \(g\) 反求 \(f\) 的过程叫二项式反演。
证明:考虑每一个元素的贡献,\(f_i\) 对 \(g_j\) 的贡献系数为 \(\binom{j}{i}\),\(g_j\) 对 \(f_n\) 的贡献系数为 \((-1)^{n-j}\binom{n}{j}\),那么合起来就是:
当且仅当 \(i=n\) 时,\(f_n\) 的系数为 \(1\),其余情况为 \(0\),证毕。
一维至少形式
设 \(f_n\) 表示恰好选取 \(n\) 个元素的方案数,\(g_n\) 表示至少选取 \(n\) 个的方案数,那么有:
证明略。
二维至少形式
设 \(f_n\) 表示恰好选取 \(n,m\) 个元素的方案数,\(g_n\) 表示至少选取 \(n,m\) 个的方案数,那么有:
更高维的形式可以以此类推。
在实际计算时,注意到两维的转移相对独立,可以分步转移,时间复杂度可以由 \(O(n^4)\) 降至 \(O(n^3)\)(认为两维上限均为 \(n\))。

浙公网安备 33010602011771号