组合证明
Double Counting
如果数同一个东西有两种不同的数法,那么两种数法的表达式对应的结果必然相等。这样的组合证明方法叫做Double Counting。
\(\dbinom{n}{k}=\dbinom{n-1}{k-1}+\dbinom{n-1}{k}\)(杨辉三角的递推式)
等式左边表示从\(n\)个不同的元素里选\(k\)个。也可以这么讨论:讨论第\(n\)个元素有没有被选。如果被选了,那么对应的方案数等价于从前\(n-1\)个里选剩下的\(k-1\)个;如果没有被选,那么对应的方案数等价于从\(n-1\)个里面选\(k\)个。所以等式两边只是同一个问题的两种不同看法而已。
\(\left(\left(\begin{array}{l}n \\k\end{array}\right)\right)=\left(\left(\begin{array}{c}n \\ k-1\end{array}\right)\right)+\left(\left(\begin{array}{c}n-1 \\ k\end{array}\right)\right)\)
等式左边表示从\(n\)个不同的元素里可重复地选\(k\)个,选的结果是忽略顺序的。也可以这么讨论:讨论第\(n\)个元素有没有被选。如果被选了,那么它可以继承所有从\(n\)个里选\(k-1\)次的结果;如果没有被选,那么只能继承所有从\(n-1\)个元素里面选\(k\)次的方案了。
\(\sum_{j=0}^{k}\left(\begin{array}{c} m \\ j \end{array}\right)\left(\begin{array}{c} n \\ k-j \end{array}\right)=\left(\begin{array}{c} m+n \\ k \end{array}\right)\)(范德蒙德卷积)。
这个式子说明,从\(m+n\)个元素里选\(k\)个,可以分类讨论从前\(m\)个里选\(j\)个,从后\(n\)个里选\(k-j\)个。
\(\left\{\begin{array}{l} n \\ k \end{array}\right\}=\left\{\begin{array}{c} n-1 \\ k-1 \end{array}\right\}+k \cdot\left\{\begin{array}{c} n-1 \\ k \end{array}\right\}\)
把\(n\)个元素分成\(k\)组。如果第\(n\)个元素自成一组,那么继承\(n-1\)个元素分\(k-1\)组的方案;如果第\(n\)个元素没有自成一组,那么它所在的组至少有两个元素。那么前\(n-1\)个元素必须已经分成了\(k\)组,第\(n\)个元素必须加入其中一组。注意这样是不会重复的,因为加入这个元素后发生重复说明加入前就已经重复了,与“不同的方案数”矛盾。
用这个递推式可以\(O(nk)\)求出斯特林数。
\(\left\{\begin{array}{l} n \\ k \end{array}\right\}=\sum_{j=0}^{n-1}\left(\begin{array}{c} n-1 \\ j \end{array}\right) \cdot\left\{\begin{array}{c} n-j-1 \\ k-1 \end{array}\right\}\)
把\(n\)个元素分成\(k\)组,考虑最后一个元素和哪些元素在同一个组。假如同组的还有\(j\)个其它元素,那么这\(j\)个元素的选择就是组合数。剩下的元素分\(k-1\)组。
\(P(n, k)=P(n-1, k-1)+P(n-k, k)\)
把\(n\)拆成\(k\)个元素的和,考虑拆出来的数字里有没有1。如果有1,那么剩下的\(n-1\)拆成\(k-1\)个数字;如果没有1,说明拆除来的每个数都大于1,那么可以给每个数都削掉一个1,变成\(n-k\)拆成\(k\)个数字,之后可以随便拆分。
\(P(n,k)=\sum\limits_{j=0}^{k}P(n-k,j)\)
把\(n\)拆成\(k\)个元素的和,考虑拆出来的数字里有多少个1。如果有\(k-j\)个1,那么剩下的\(j\)个数都大于1。除去所有的1,后面总共有\(n-k+j\)个数,全都削掉1,转化成\(n-k\)拆成\(j\)个数。
\(\sum\limits_{j=0}^{n}(-1)^j\dbinom{n}{j}\dbinom{2n+k-2j}{n}=2^n\)
从\((0,0)\)出发,每次只能走到向右或向上走,先走到\((n,n)\),再一路往右走到\((n+k,n)\)。在从\((0,0)\)走到\((n,n)\)的过程中,总共走\(2n\)步。规定\(\forall i \in [n]\),第\(2i-1\)步和第\(2i\)步不能都向右走。
两步为一组看这个问题,每组只有右上和上右两种情况,最后的\(k\)步一定全部向右,因此总的方案数就是\(2^n\)。
考虑容斥。假设对于\(i \in [n]\),如果第\(2i-1\)步和第\(2i\)步都向右走了,就称这次走路在坏集合\(A_i\)内。设\(J=\{A_{i_1},\cdots,A_{i_t}\}\),那么\(N_\geq(J)\)应当这样计算,总共走\(2n+k\)步,现在已经确定了有\(2t\)步,剩下的\(2n+k-2t\)步里必须有\(n\)步是向上走的,因此\(N_\geq(J)=\dbinom{2n+k-2t}{n}\)。根据容斥,总方案数应当是\(N_=(\empty)=\sum\limits_{j=0}^{n}(-1)^j\sum\limits_{J \in \binom{\mathscr{A}}{j}}N_\geq(J)=\sum\limits_{j=0}^{n}(-1)^j\dbinom{n}{j}\dbinom{2n+k-2j}{n}\)