【学习笔记】组合数学
基础定义、式子之类的
排列:\(A^{m}_{n}\) 表示在 \(n\) 个人中选 \(m\) 个人,顺序对答案有影响(即 \(12345\) 和 \(42351\) 算作不同)。\(A^{m}_{n}=\frac{n!}{(n-m)!}\),意义就是第一个可以有 \(n\) 种选择,第二个有 \(n-1\) 种选择,一直到第 \(m\) 个有 \(n-m+1\) 个选择。撑起来就是上面那个式子。特殊的有 \(A_{n}^{n}=n!\)。
组合:\(C_{n}^{m}\) 或者 \(\binom{n}{m}\) 表示在 \(n\) 个人中选 \(m\) 个人,顺序对答案无影响(即 \(12345\) 和 \(21543\) 算作相同)。组合的计算方法有很多,比较常见的是递推和算阶乘。
递推式是 \(C_{n}^{m}=C_{n-1}^{m-1}+C_{n-1}^{m}\),就是说多加的那个人可能是新加的那个人,也可能是原来的序列中再挑了一个人。
阶乘算法是 \(C_{n}^{m}=\frac{n!}{m!(n-m)!}\)。发现就是相对于 \(A_{n}^{m}\) 多乘上一个 \(\frac{1}{m!}\)。也就是说对于选择的 \(m\) 个人相同的情况在排列中会算 \(A_{m}^{m}\) 中算了 \(m!\) 次,但是在组合中只会被算 \(1\) 次,所以乘上一个 \(\frac{1}{m!}\) 就好了。有 \(\binom{n}{m}=\binom{n}{n-m}\)。
吸收公式:\(\binom{r}{k}=\frac{r}{k}\times\binom{r-1}{k-1}\),把组合数代进去很容易看出来。
吸收指标:\(\binom{n}{m}\binom{m}{k}=\binom{n}{k}\binom{n-k}{m-k}\)。把阶乘代进左边得到 \(\frac{n!}{k!(n-m)!(m-k)!}\),分子分母同时乘 \((n-k)!\) 然后就得到右边。
上指标求和:\(\sum_{i=0}^n\binom{i}{m}=\binom{n+1}{m+1}\)。理解为在 \(n+1\) 个数中选 \(m+1\) 个数的子集个数。枚举最后一个数选择第 \(i\) 个,\(\binom{n+1}{m+1}=\sum_{i=1}^{n+1}\binom{i-1}{m}=\sum_{i=0}^n\binom{i}{m}\)。
平行求和:\(\sum_{i=0}^n\binom{m+i}{i}=\binom{m+n+1}{n}\)。这个不会证。
和斐波那契数列有关的:\(\sum_{i=0}^n\binom{n-i}{i}=F_{n+1}\),其中 \(F_i\) 为斐波那契数列的第 \(i\) 项。不会证。
不知名式子:\(\sum_{i=0}^ni^2\binom{n}{i}=n(n+1)2^{n-2}\)。
证明:
- 考虑组合推理形式。如果在 \(n\) 个人中枚举选 \(i\) 个人,给两个人打上标记(可以是同一个),方案数是 \(\sum_{i=0}^n i^2\binom{n}{i}\)。
- 考虑根据被标记的人重新计算。如果标记同一个人,方案数为 \(n2^{n-1}\)。
- 如果标记两个人,方案数为 \(n(n-1)2^{n-2}\)。加上之后得到 \(2^{n-2}(2n+n^2-n)=n(n+1)2^{n-2}\)。
范德蒙徳卷积:\(\sum_{i=0}^k\binom{n}{i}\binom{m}{k-i}=\binom{n+m}{k}\)。考虑组合意义证明。在大小为 \(n+m\) 的集合中选择出 \(k\) 个数,相当于把集合拆成 \(n\) 和 \(m\) 两个部分,在 \(n\) 中选 \(i\) 个,然后在 \(m\) 中选剩下的 \(k-i\) 个。
二项式定理:
定理本身是这个:\((x+y)^n=\sum_{i=0}^n\binom{n}{i}x^iy^{n-i}\)。
证明:
- 对于 \(n=1\) 显然成立。考虑使用归纳法。假设对于 \(n=k\) 成立,令现在 \(n=k+1\)。
- \((x+y)^{k+1}=x(x+y)^k+y(x+y)^k\),代入得 \(x\sum_{i=0}^k\binom{k}{i}x^iy^{n-i}+y\sum_{j=0}^k\binom{k}{j}x^jy^{n-j}\)。
- 乘进去得到 \(\sum_{i=0}^k\binom{k}{i}x^{i+1}y^{k-i}+\sum_{j=0}^k\binom{k}{j}x^jy^{k-j+1}\)。为了合并让指数相同,令 \(i=j-1\),为了避免出现负数提出 \(j=0\) 项。
- \(y^{k+1}+\sum_{j=1}^{k+1}\binom{k}{j-1}x^jy^{k-j+1}+\sum_{j=1}^{k}\binom{k}{j}x^jy^{k-j+1}\)。发现很像了,把 \(j=k+1\) 提出来。
- \(y^{k+1}+x^{k+1}+\sum_{j=1}^kx^jy^{k-j+1}(\binom{k}{j-1}+\binom{k}{j})\)。根据递推式可以把后面的那一坨换成 \(\binom{k+1}{j}\)。\(y^{k+1}=\binom{k+1}{0}x^0y^{k-0+1},x^{k+1}=\binom{k+1}{k+1}x^{k+1}y^{k-k-1+1}\)。
- 把两个零散的代回去就会得到二项式定理的式子。
根据二项式定理可以得到很多有用的东西。
二项式定理中取 \(x=y=1\) 可以得到 \(\sum_{i=0}^n\binom{n}{i}=2^n\),取 \(x=-1,y=1\) 可以得到 \(\sum_{i=0}^n(-1)^i\binom{n}{i}=[n=0]\)。
\(\sum_{i=0}^ni\binom{n}{i}=n2^{n-1}\)。
证明:
- 令 \(S=\sum_{i=0}^ni\binom{n}{i}\)。则 \(S\) 同时等于 \(\sum_{i=0}^{n}(n-i)\binom{n}{i}\)。
- 所以 \(2S=\sum_{i=0}^nn\binom{n}{i}=n2^n\)。除以二即得证。
模质数 \(p\) 意义下的的类似二项式定理的东西:\((x+y)^p\equiv x^p+y^p\pmod p\)。
证明:
- 把组合数拆开,\(\binom{p}{i}=\frac{p!}{i!(p-i)!}\)。发现分子是 \(p!\),如果不被约掉的话就会使这一项变成 \(0\)。
- 因为 \(p\) 是质数,所以只有在 \(i=0\) 或者 \(i=p\) 时分母会出现 \(p!\)。所以只需要考虑 \(i=0\) 和 \(i=p\) 时取值。就会得到 \(x^p+y^p\)。
二项式反演:若已知 \(f\),则显然有 \(g_n=\sum_{i=0}^n\binom{n}{i}f_i\)。若已知 \(g\) 需要求 \(f\),则 \(f_n=\sum_{i=0}^n\binom{n}{i}(-1)^{n-i}g_i\)。这个就是二项式反演。不是很懂,遇见表达有问题会回来改。
证明:
- 将 \(g_i\) 展开,得到反演式为 \(f_n=\sum_{i=0}^n\binom{n}{i}(-1)^{n-i}\sum_{j=0}^i\binom{i}{j}f_j=\sum_{i=0}^n\sum_{j=0}^i\binom{n}{i}\binom{i}{j}(-1)^{n-i}f_j\)。
- 改变一下枚举顺序:\(f_n=\sum_{j=0}^nf_j\sum_{i=j}^n\binom{n}{i}\binom{i}{j}(-1)^{n-i}\)。吸收指标得 \(f_n=\sum_{j=0}^n\binom{n}{j}f_j\sum_{i=j}^n(-1)^{n-i}\binom{n-j}{i-j}\)。
- 令 \(k=i-j\),反演式进一步表达为 \(f_n=\sum_{j=0}^nf_j\sum_{k=0}^{n-j}\binom{n-j}{k}(-1)^{n-j-k}\)。在二项式定理中取 \(x=1,y=-1\) 就会得到形如后面这一坨的式子,根据上面的内容我们证明了这个式子的值是 \([n=0]\),本处为 \([n-j=0]\) 即 \([n=j]\)。
- 所以反演式简化为 \(f_n=\sum_{j=0}^n[n=j]f_j\)。只有在 \(n\) 取 \(j\) 的时候才有取值,所以成立。
同时有一种转化,若 \(g_n=\sum_{i=0}^n(-1)^i\binom{n}{i}f_i\),则 \(f_n=\sum_{i=0}^n(-1)^i\binom{n}{i}g_i\),这个的证明是相似的。
插板法
常用的组合数学技巧。诸如此类其实有一个叫小球盒子问题,这篇日报有很详细的讲法。
经典问题:给定 \(n\) 个相同的球,分成相同的 \(m\) 组,每组不能空,方案数为 \(\binom{n-1}{m-1}\)。
考虑分组即为在一些球的空隙间插板子,用 \(m-1\) 个板子隔开出 \(m\) 组。一共有 \(n-1\) 个空位,所以答案就是 \(\binom{n-1}{m-1}\)。
经典问题:给定 \(n\) 个相同的球,分成相同的 \(m\) 组,每组可以空,方案数为 \(\binom{n+m-1}{n}\)。
考虑现在多了 \(m\) 个球,然后题目条件变为每组不能空,方案数为 \(\binom{n+m-1}{m-1}=\binom{n+m-1}{n}\)。可以认为我们对每组都加一个球,然后把这些球都拿走,发现是一一对应的,所以和上一个问题的解法相同。
经典问题:给定 \(n\) 个相同的球,分成不同 \(m\) 组,第 \(i\) 组至少要有 \(a_i\) 个球,方案数为 \(\binom{n-\sum a+m-1}{n-\sum_a}\)。
显然,类比上面的,考虑把每个组的 \(a_i\) 个球减去,问题变成给 \(n-\sum a\) 个球分成相同 \(m\) 组每组可以空的方案数,按第二个算就好。
不相邻的排列:在 \(1\) 到 \(n\) 选 \(m\) 个数,这 \(m\) 个数互不相邻的组合有 \(\binom{n-m+1}{m}\) 种。可以假设选一个用了两个数,当前选择的数并且这个数后面那个不能选,那么就等于在 \(n-m+1\) 个数(选择 \(n\) 不需要占用两个)中随便选 \(m\) 个数的方案数。
第二类斯特林数(斯特林子集数)
记作 \(\begin{Bmatrix}n\\m\end{Bmatrix}\) 或 \(S(n,m)\) 。表示将 \(n\) 个不同的球分进相同的 \(m\) 个盒子,盒子不允许空的方案数。递推式是 \(S(n,m)=S(n-1,m-1)+m\times S(n-1,m)\)。边界是 \(S(0,0)=1\)。证明显然,考虑增加一个新球时有两种可能,新开一个,是 \(S(n-1,m-1)\);或者放进原来一个盒子,是 \(S(n-1,m)\),每个盒子都有可能,再乘上 \(m\)。
通项公式:\(S(n,m)=\sum_{i=0}^m\frac{(-1)^{m-i}i^n}{i!(m-i)!}\)。
证明:
- 使用容斥原理。设将 \(n\) 个不同的球分到 \(i\) 个不同的盒子,盒子能空的方案数记为 \(g_i\),\(n\) 个不同的球分到 \(i\) 个不同的盒子,盒子不能空的方案数记为 \(f_i\)。显然对于 \(g_i\) 和 \(f_i\),有 \(g_i=i^n=\sum_{j=0}^i\binom{i}{j}f_j\)。发现这个东西就是一个二项式反演。
- \(f_i=\sum_{j=0}^n\binom{i}{j}(-1)^{i-j}g_j=\sum_{j=0}^n\binom{i}{j}(-1)^{i-j}j^n=\sum_{j=0}^n\frac{i!(-1)^{i-j}j^n}{j!(i-j)!}\)。
- 考虑 \(f_i\) 和 \(S_{n,i}\) 的关系,发现问题里不同的在于第二类斯特林数的盒子是相同的,所以就是一个类似排列和组合的区别,乘以 \(\frac{1}{i!}\) 就好。
- 即 \(S(n,m)=\frac{f_m}{m!}\)。代进去就是上面那个通项公式。
所以根据这个推出来的还有一个重要公式是 \(x^n=\sum_{i=0}^xi!\binom{x}{i}S(n,i)=\sum_{i=0}^xS(n,i)\frac{x!}{(x-i)!}\)。
卡特兰数
没有一个确定的定义,记作 \(Catalan_i\),这一板块会简记为 \(C_i\),这里给一个在数据规模为 \(n\) 的情况下答案是 \(C_n\) 的问题作为其定义。
记住 \(C_0=C_1=1,C_2=2\),很多时候边界需要自己处理。
问有多少长度为 \(2n\) 的合法括号序列。答案是卡特兰数 \(C_n\)。请在一张草稿纸上画一个平面直角坐标系,这里只需要用到第一象限。
问题能够转化为给定一个平面直角坐标系左括号是往上走,右括号是往右走,问从原点走到 \((n,n)\) 且不碰到 \(y=x+1\) 的路径数。
没有限制很好做,答案是 \(\binom{2n}{n}\),即在 \(2n\) 步中选择 \(n\) 个往上。考虑限制的条件。我们考虑对于一个经过了 \(y=x+1\) 的路径,以 \(y=x+1\) 为轴翻转。此时这条路径终点变为 \((n-1,n+1)\),每条不合法的路径翻转后都是一条到 \((n-1,n+1)\) 的路径,而每条到 \((n-1,n+1)\) 的路径翻转后都是一条不合法路径,也就是说不合法路径和经过 \(y=x+1\) 的路径是一一对应的。所以答案减去 \(C(2n,n-1)\) 即可。我们得到卡特兰数的公式 \(C_n=\binom{2n}{n}-\binom{2n}{n-1}(n\ge 1)\)。
卡特兰数还有其他常用的公式:
公式化简:\(C_n=\frac{\binom{2n}{n}}{n+1}(n\ge 2)\)。可以把开始推的式子写出来。\(C_n=\frac{(2n)!}{n!n!}-\frac{(2n)!}{(n-1)!(n+1)!}\)。硬提出来 \(\frac{1}{n+1}\) 得到 \(\frac{1}{n+1}\times(\frac{(2n)!(n+1)}{n!n!}-\frac{(2n)!}{n!(n-1)!})\)。然后显然硬把后面那个通分得到 \(\frac{1}{n+1}\times\frac{(2n)!(n+1)-(2n)!n}{n!n!}\)。化简得到 \(\frac{\binom{2n}{n}}{n+1}\)。
递推形式:\(C_n=\sum_{i=0}^nC_{i-1}\times C_{n-i}(n\ge 2)\) 以及 \(C_n=\frac{(4n-2)C_{n-1}}{n+1}(n\ge 1)\)。不证。