我校请来了某位厉害的数学老师讲三天组合数学,在此记一些重点知识。以下按照《组合数学》这本书的章节顺序。
由于我太菜,难免有错漏,敬请谅解并告知。
这一章是介绍了很多组合数学的例子,知识点杂,也比较简单,故跳过。
记排列数为: p ( n , k ) = n k ‾ = n ! ( n − k ) ! p(n,k)=n^{\underline{k}}=\frac{n!}{(n-k)!} p(n,k)=nk=(n−k)!n!
记组合数为: ( n k ) = n ! k ! ( n − k ) ! \binom n k=\frac{n!}{k!(n-k)!} (kn)=k!(n−k)!n!
1.根据定义有:
p ( n , k ) = k ! ∗ ( n k ) p(n,k)=k!*\binom n k p(n,k)=k!∗(kn)
( n k ) = ( n n − k ) \binom n k=\binom n {n-k} (kn)=(n−kn)
( n k + 1 ) = ( n k ) ∗ n − k k + 1 \binom n {k+1} =\binom n k *\frac{n-k}{k+1} (k+1n)=(kn)∗k+1n−k
( n k ) = ( n − 1 k − 1 ) + ( n − 1 k ) \binom n k=\binom {n-1} {k-1}+\binom {n-1} {k} (kn)=(k−1n−1)+(kn−1)
2.其他性质:
∑ i = 0 n ( n i ) = 2 n \sum_{i=0}^{n}\binom {n} {i}=2^n i=0∑n(in)=2n
理解:大小为n的集合选任意子集,有 2 n 2^n 2n种;
如果枚举子集大小,为左边和式
∑ n = k m ( n k ) = ( m + 1 k + 1 ) \sum_{n=k}^{m}\binom {n} {k}=\binom {m+1} {k+1} n=k∑m(kn)=(k+1m+1)
证明:由 ( n k ) = ( n − 1 k − 1 ) + ( n − 1 k ) \binom n k=\binom {n-1} {k-1}+\binom {n-1} {k} (kn)=(k−1n−1)+(kn−1)得 ( n k ) = ( n + 1 k + 1 ) − ( n k + 1 ) \binom n k=\binom {n+1} {k+1}-\binom {n} {k+1} (kn)=(k+1n+1)−(k+1n)
所以 ∑ n = k m ( n k ) = ∑ n = k m ( n + 1 k + 1 ) − ( n k + 1 ) = ( n + 1 k + 1 ) − ( k k + 1 ) = ( n + 1 k + 1 ) \sum_{n=k}^{m}\binom {n} {k}=\sum_{n=k}^{m}\binom {n+1} {k+1}-\binom {n} {k+1}=\binom {n+1} {k+1}-\binom {k} {k+1}=\binom {n+1} {k+1} ∑n=km(kn)=∑n=km(k+1n+1)−(k+1n)=(k+1n+1)−(k+1k)=(k+1n+1)
( 2 n n ) = ∑ i = 0 n ( n i ) 2 \binom {2n} {n}=\sum_{i=0}^n\binom{n}{i}^2 (n2n)=i=0∑n(in)2
理解:有一个 2 n 2n 2n元素的集合S,从中选出 n n n个数有 ( 2 n n ) \binom{2n}{n} (n2n)种方案,我们把的分为左右两半,枚举左边选几个,方案为 ∑ i = 0 n ( n i ) × ( n n − i ) = ∑ i = 0 n ( n i ) 2 \sum_{i=0}^n\binom{n}{i}\times \binom{n}{n-i} =\sum_{i=0}^n\binom{n}{i}^2 ∑i=0n(in)×(n−in)=∑i=0n(in)2,左右相等。
即计算可重集 S = { a 1 ∗ 1 , a 2 ∗ 2 , . . . , a n ∗ n } S=\{a_1*1,a_2*2,..., a_n*n\} S={a1∗1,a2∗2,...,an∗n}的 ∑ i a i \sum_{i}a_i ∑iai(记为 n n n)排列:
可以不管重复全部排一遍,1重复计算了 a 1 ! a_1! a1!次,…k重复计算了 a k a_k ak次,要除掉,答案为: n ! a 1 ! × a 2 ! × . . . × a n ! \frac{n!}{a_1!\times a_2!\times ...\times a_n!} a1!×a2!×...×an!n!
拓展:n个相同的盒子,每个盒子放k个球,有 n k nk nk个不同的球,求方案数
如果盒子不同,等价于上面的情况,答案为: ( n k ) ! ( k ! ) n \frac{(nk)!}{(k!)^n} (k!)n(nk)!
盒子相同,再除以 k ! k! k!即可,答案为: ( n k ) ! k ∗ ( k ! ) n \frac{(nk)!}{k*(k!)^n} k∗(k!)n(nk)!
即计算可重集 S = { ∞ ∗ 1 , ∞ ∗ 2 , . . . , ∞ ∗ n } S=\{\infty *1,\infty *2,..., \infty *n\} S={∞∗1,∞∗2,...,∞∗n}的 m m m组合
就是找出每个元素的个数 a i , a 2 . . . a n a_i,a_2...a_n ai,a2...an,使得 ∑ i = 1 n a i = m \sum_{i=1}^{n}a_i=m ∑i=1nai=m的非负整数解个数
插板法即可,注意可以为0,答案为 ( m + n − 1 n − 1 ) \binom {m+n-1} {n-1} (n−1m+n−1)
如果对 a i a_i ai有什么大于小于之类的限制,需用容斥,见这道题
没讲,跳过
前面的内容主要讲构造排列组合的神妙做法
然而大力dfs即可,不必如此巧妙
后面讲到偏序,比较重要,我可能会新开博客写(flag)
第五章也涉及到偏序,也先不写
1.二项式定理: ( x + y ) n = ∑ i = 0 n ( n k ) x k y n − k (x+y)^n=\sum_{i=0}^{n}\binom {n} {k} x^{k}y^{n-k} (x+y)n=∑i=0n(kn)xkyn−k
特别的,当y=1时, ( x + 1 ) n = ∑ i = 0 n ( n k ) x k (x+1)^n=\sum_{i=0}^{n}\binom {n} {k} x^{k} (x+1)n=∑i=0n(kn)xk
可以用乘法分配律证明
2.拓展:多项式定理:
∑ i = 1 n x i = ∑ ( ∑ i n i ) = n n ! ∏ i n i ! ∏ i x i n i \sum_{i=1}^n x_i=\sum_{(\sum_{i}n_i)=n}\frac{n!} {\prod_{i}n_i!}\prod_ix_i^{n_i} i=1∑nxi=(∑ini)=n∑∏ini!n!i∏xini
理解同二项式定理
3.拓展:牛顿二项式定理:
当 α \alpha α为实数时:
( x + y ) α = ∑ k = 0 ∞ ( α k ) x k y α − k (x+y)^{\alpha}=\sum_{k=0}^\infty \binom {\alpha} {k}x^ky^{\alpha-k} (x+y)α=k=0∑∞(kα)xkyα−k
这里涉及到实数组合数,先不证明(要用生成函数,不会。。。),它可以用来估计开根运算。
把二项式定理多次代数,求导,可以求出 ∑ k = 1 n k p ( n k ) \sum_{k=1}^{n}k^p\binom{n}{k} ∑k=1nkp(kn)的等式,随着p越大,等式越复杂,如:
1.p=1:
把二项式定理代入 y = 1 y=1 y=1得 ( x + 1 ) n = ∑ i = 0 n ( n k ) x k (x+1)^n=\sum_{i=0}^{n}\binom {n} {k} x^{k} (x+1)n=∑i=0n(kn)xk
两边求导得: n ( x + 1 ) n − 1 = ∑ i = 1 n k ( n k ) x k − 1 n(x+1)^{n-1}=\sum_{i=1}^{n}k\binom {n} {k} x^{k-1} n(x+1)n−1=∑i=1nk(kn)xk−1
代入 x = 1 x=1 x=1得:
∑ i = 1 n k ( n k ) = n 2 n − 1 \sum_{i=1}^{n}k\binom{n}{k}=n2^{n-1} i=1∑nk(kn)=n2n−1
2.p=2:
把上面的式子 n ( x + 1 ) n − 1 = ∑ i = 1 n k ( n k ) x k − 1 n(x+1)^{n-1}=\sum_{i=1}^{n}k\binom {n} {k} x^{k-1} n(x+1)n−1=∑i=1nk(kn)xk−1两边乘x得:
n x ( x + 1 ) n − 1 = ∑ i = 1 n k ( n k ) x k nx(x+1)^{n-1}=\sum_{i=1}^{n}k\binom {n} {k} x^{k} nx(x+1)n−1=i=1∑nk(kn)xk
两边求导得: n [ ( x + 1 ) n − 1 + x ( n − 1 ) ( x + 1 ) n − 2 ] = ∑ i = 1 n k 2 ( n k ) x k − 1 n\left[(x+1)^{n-1}+x(n-1)(x+1)^{n-2}\right]=\sum_{i=1}^{n}k^2\binom {n} {k} x^{k-1} n[(x+1)n−1+x(n−1)(x+1)n−2]=∑i=1nk2(kn)xk−1
代入 x = 1 x=1 x=1得 n [ 2 n − 1 + ( n − 1 ) 2 n − 2 ] = ∑ i = 1 n k 2 ( n k ) n\left[2^{n-1}+(n-1)2^{n-2}\right]=\sum_{i=1}^{n}k^2\binom {n} {k} n[2n−1+(n−1)2n−2]=∑i=1nk2(kn)
即:
∑ i = 1 n k 2 ( n k ) = n ( n + 1 ) 2 n − 2 \sum_{i=1}^{n}k^2\binom {n} {k}=n(n+1)2^{n-2} i=1∑nk2(kn)=n(n+1)2n−2
先说明符号:交集符号 ∩ \cap ∩,并集符号 ∪ \cup ∪,全集为 u u u的补集: ∁ u \complement_u ∁u,集合大小: ∣ ∣ |\ \ | ∣ ∣
有以下结论(具体理解可以画画图,证明不说了)
1. ∣ A 1 ∪ A 2 ∪ . . . ∪ A m ∣ = ∑ s ( − 1 ) s − 1 ∑ i 1 , i 2 . . . i s ∣ A i 1 ∩ A i 2 ∩ . . . ∩ A i s ∣ |A_1\cup A_2\cup ... \cup A_m|=\sum_{s} (-1)^{s-1}\sum_{i_1,i_2...i_s}|A_{i_1}\cap A_{i_2}\cap...\cap A_{i_s}| ∣A1∪A2∪...∪Am∣=∑s(−1)s−1∑i1,i2...is∣Ai1∩Ai2∩...∩Ais∣
2. ∣ ∁ u A 1 ∩ ∁ u A 2 ∩ . . . ∩ ∁ u A m ∣ = ∣ u ∣ − ∣ A 1 ∪ A 2 ∪ . . . ∪ A m ∣ |\complement_uA_1\cap\complement_uA_2\cap...\cap\complement_uA_m|=|u|-|A_1\cup A_2\cup ... \cup A_m| ∣∁uA1∩∁uA2∩...∩∁uAm∣=∣u∣−∣A1∪A2∪...∪Am∣
计数的时候如果直接不好算,可以算它的补集,算出不符合某些性质,容斥一下,下面的错排公式推理是个经典的例子。
即1至n的排列 A 1 , A 2 , . . . A n A_1,A_2,...A_n A1,A2,...An满足 ∀ A i ≠ i \forall A_i\neq i ∀Ai̸=i,记答案为 D n D_n Dn
直接算不好,考虑容斥:记集合 S i S_i Si为满足 k k k个 A i = i A_i=i Ai=i的方案
至少满足一个 A i = i A_i=i Ai=i的方案数: ∣ S 1 ∣ = ( n 1 ) ∗ ( n − 1 ) ! |S_1|=\binom {n}{1}*(n-1)! ∣S1∣=(1n)∗(n−1)!
至少满足两个 A i = i , A j = j A_i=i,A_j=j Ai=i,Aj=j的方案数: ∣ S 2 ∣ = ( n 2 ) ∗ ( n − 2 ) ! |S_2|=\binom {n}{2}*(n-2)! ∣S2∣=(2n)∗(n−2)!
…
全部满足 A i = i A_i=i Ai=i的方案数: ∣ S n ∣ = ( n n ) ∗ ( n − n ) ! |S_n|=\binom {n}{n}*(n-n)! ∣Sn∣=(nn)∗(n−n)!
答案为 ∣ ∁ u A 1 ∩ ∁ u A 2 ∩ . . . ∩ ∁ u A m ∣ = ∣ u ∣ − ∑ s ( − 1 ) s − 1 ∑ i 1 , i 2 . . . i s ∣ A i 1 ∩ A i 2 ∩ . . . ∩ A i s ∣ |\complement_uA_1\cap\complement_uA_2\cap...\cap\complement_uA_m|=|u|-\sum_{s} (-1)^{s-1}\sum_{i_1,i_2...i_s}|A_{i_1}\cap A_{i_2}\cap...\cap A_{i_s}| ∣∁uA1∩∁uA2∩...∩∁uAm∣=∣u∣−s∑(−1)s−1i1,i2...is∑∣Ai1∩Ai2∩...∩Ais∣
D n = n ! + ∑ i = 1 n ( − 1 ) i ( n i ) ∗ ( n − i ) ! = ∑ i = 0 n ( − 1 ) i n ! i ! D_n=n!+\sum_{i=1}^{n}(-1)^i\binom {n}{i}*(n-i)!=\sum_{i=0}^{n}(-1)^i\frac{n!}{i!} Dn=n!+i=1∑n(−1)i(in)∗(n−i)!=i=0∑n(−1)ii!n!
这就是著名的错排公式了
又因为 e − 1 = ∑ 1 = 0 ∞ ( − 1 ) i 1 i ! e^{-1}=\sum_{1=0}^\infty (-1)^{i}\frac{1}{i!} e−1=∑1=0∞(−1)ii!1
所以完全错排的概率大概是:
∑ i = 0 n ( − 1 ) i n ! i ! n ! ≈ 1 e ≈ 0.36787944117 \frac{\sum_{i=0}^{n}(-1)^i\frac{n!}{i!}}{n!}\approx \frac{1}{e}\approx0.36787944117 n!∑i=0n(−1)ii!n!≈e1≈0.36787944117
生成函数就是把一个数列作为多项式的系数,一般是无穷项(如果数列非无穷向后补0),例如奇数数列生成函数为 ∑ i ≥ 0 ∞ ( i m o d 2 ) x i \sum_{i\geq 0}^\infty (i\ mod\ 2)x_i ∑i≥0∞(i mod 2)xi;数列 { ( n 0 ) , ( n n ) , . . . , ( n n ) } \{\binom{n}{0},\binom{n}{n},...,\binom{n}{n}\} {(0n),(nn),...,(nn)}生成函数为 ∑ i = 0 n ( n i ) x i = ( x + 1 ) n \sum_{i=0}^n\binom{n}{i}x^i=(x+1)^n ∑i=0n(in)xi=(x+1)n(二项式定理推论)。关于满足乘法原理的拓展请看原书上的例子或做一做bzoj 3028 食物。
虽然生成函数可能是无限级数,但求某一项的值只用到有限的项。一般可以用多项式的各种运算,就能一次性求出范围内所有的数项。(多项式运算的具体实现见这里:多项式全家桶)我们也可以通过化简多项式来更简单地求值,如:
1.根据二项式定理推论,有 ∑ i = 0 n ( n i ) x i = ( x + 1 ) n \sum_{i=0}^n\binom{n}{i}x^i=(x+1)^n ∑i=0n(in)xi=(x+1)n(例子二)
2.根据泰勒展开,有:
∑ i = 0 ∞ x i = 1 1 − x \sum_{i=0}^\infty x^i=\frac{1}{1-x} i=0∑∞xi=1−x1
∑ i = 0 ∞ x i i ! = e x \sum_{i=0}^\infty \frac{x^i}{i!}=e^x i=0∑∞i!xi=ex
k倍数数列:
∑ i = 0 , i % k = = 0 ∞ x i = 1 1 − x k \sum_{i=0,i\%k==0}^{\infty}x_i=\frac{1}{1-x^k} i=0,i%k==0∑∞xi=1−xk1
根据上面容易推出奇数数列:
x 1 + x 3 + x 5 + . . . = x ( x 1 + x 3 + x 5 + . . . ) = x 1 − x 2 x_1+x_3+x_5+...=x(x_1+x_3+x_5+...)=\frac{x}{1-x^2} x1+x3+x5+...=x(x1+x3+x5+...)=1−x2x
3.因为有牛顿二项式定理 ( x + y ) α = ∑ k = 0 ∞ ( α k ) x k y α − k (x+y)^{\alpha}=\sum_{k=0}^\infty \binom {\alpha} {k}x^ky^{\alpha-k} (x+y)α=∑k=0∞(kα)xkyα−k,当 x = 1 , y = − x , α = − k x=1,y=-x,\alpha=-k x=1,y=−x,α=−k时,有:
1 ( 1 − x ) k = ∑ i = 0 ∞ ( − k i ) ( − x ) i \frac{1}{(1-x)^k}=\sum_{i=0}^\infty\binom{-k}{i}(-x)^{i} (1−x)k1=i=0∑∞(i−k)(−x)i
又因为:
( − k i ) = ( − k ) ∗ ( − k − 1 ) ∗ . . . ∗ ( − k − i + 1 ) i ! = ( − 1 ) i ∗ k ∗ ( k + 1 ) ∗ . . . ∗ ( k + i − 1 ) i ! = ( − 1 ) i ∗ ( n + i − 1 i ) \binom{-k}{i}=\frac{(-k)*(-k-1)*...*(-k-i+1)}{i!}=(-1)^i*\frac{k*(k+1)*...*(k+i-1)}{i!}=(-1)^i*\binom{n+i-1}{i} (i−k)=i!(−k)∗(−k−1)∗...∗(−k−i+1)=(−1)i∗i!k∗(k+1)∗...∗(k+i−1)=(−1)i∗(in+i−1)
所以 ∑ i = 0 ∞ ( − k i ) ( − x ) i = ∑ i = 0 ∞ ( n + i − 1 i ) x i \sum_{i=0}^\infty\binom{-k}{i}(-x)^{i}=\sum_{i=0}^\infty\binom{n+i-1}{i}x_i ∑i=0∞(i−k)(−x)i=∑i=0∞(in+i−1)xi
所以 ∑ i = 0 ∞ ( n + i − 1 i ) x i \sum_{i=0}^\infty\binom{n+i-1}{i}x_i ∑i=0∞(in+i−1)xi生成函数为:
∑ i = 0 ∞ ( n + i − 1 i ) x i = 1 ( 1 − x ) k \sum_{i=0}^\infty\binom{n+i-1}{i}x_i=\frac{1}{(1-x)^k} i=0∑∞(in+i−1)xi=(1−x)k1
根据第一章中多重集合排列的计算,对于一些相同部分的重复计算一般要除以 n ! n! n!,而 1 n ! \frac{1}{n!} n!1又出现在e的泰勒展开 ∑ i = 0 ∞ x i i ! = e x \sum_{i=0}^\infty \frac{x^i}{i!}=e^x ∑i=0∞i!xi=ex中,会方便化简,例如:
用三种颜色给 1 × n 1\times n 1×n的格子涂色,要求红格子个数为偶数至少有一个蓝格子的方案数的生成函数 f ( x ) f(x) f(x)是
f ( x ) = ( 1 + x 2 2 ! + x 4 4 ! + . . . ) ( 1 + x 1 1 ! + x 2 2 ! + . . . ) ( x 1 1 ! + x 2 2 ! + . . . ) f(x)=\left(1+\frac{x^2}{2!}+\frac{x^4}{4!}+...\right)\left(1+\frac{x^1}{1!}+\frac{x^2}{2!}+...\right)\left(\frac{x^1}{1!}+\frac{x^2}{2!}+...\right) f(x)=(1+2!x2+4!x4+...)(1+1!x1+2!x2+...)(1!x1+2!x2+...)
它等于:
f ( x ) = e x + e − x 2 e x ( e x − 1 ) = e 3 x − e 2 x + e x − 1 2 = − 1 2 + ∑ n = 0 ∞ 3 n − 2 n + 1 2 n ! x n f(x)=\frac{e^x+e^{-x}}{2}e^x(e^x-1)=\frac{e^{3x}-e^{2x}+e^x-1}{2}=-\frac{1}{2}+\sum_{n=0}^\infty\frac{3^n-2^n+1}{2n!}x^n f(x)=2ex+e−xex(ex−1)=2e3x−e2x+ex−1=−21+n=0∑∞2n!3n−2n+1xn
太难了,先不写
卡特兰数就是一个数列(记为 C n C_n Cn)满足通项: C i = ( 2 n n ) n + 1 C_i=\frac{{2n}\choose{n}}{n+1} Ci=n+1(n2n)(公式1)
另外,还有递推式: C n = ∑ i = 0 n − 1 C i C n − i − 1 C_n=\sum_{i=0}^{n-1}C_iC_{n-i-1} Cn=∑i=0n−1CiCn−i−1
它们是一致的,证明。。。我太菜了,不会
它有许多具体含义,如:
1.有n个1,n个-1,对于它们的排列,从左到右计算前缀和,满足每一个前缀和都不小于0的排列数是 C n C_n Cn
2.n对括号组成的括号序列为 C n C_n Cn
3.n边形的三角剖分(旋转后相同算一个)为 C n − 2 C_{n-2} Cn−2
4.n个顶点的二叉树的形态数为 C n C_n Cn
可以看出1与2本质是一致的,可以推倒出公式1,其证明可见这位dalao的博客
3根4都可以推出一个递推式(公式2),就是卡特兰数。
缓更。。。咕咕咕。。。。。。
都没讲。。。。。
(话说图论是组合数学??)
接下来是重点的Polya计数了