组合数学学习笔记

我校请来了某位厉害的数学老师讲三天组合数学,在此记一些重点知识。以下按照《组合数学》这本书的章节顺序。
由于我太菜,难免有错漏,敬请谅解并告知。

一、什么是组合数学

这一章是介绍了很多组合数学的例子,知识点杂,也比较简单,故跳过。

二、排列和组合

排列组合的性质

记排列数为: p ( n , k ) = n k ‾ = n ! ( n − k ) ! p(n,k)=n^{\underline{k}}=\frac{n!}{(n-k)!} p(n,k)=nk=(nk)!n!
记组合数为: ( n k ) = n ! k ! ( n − k ) ! \binom n k=\frac{n!}{k!(n-k)!} (kn)=k!(nk)!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)=(nkn)
( 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+1nk
( n k ) = ( n − 1 k − 1 ) + ( n − 1 k ) \binom n k=\binom {n-1} {k-1}+\binom {n-1} {k} (kn)=(k1n1)+(kn1)
2.其他性质:
∑ i = 0 n ( n i ) = 2 n \sum_{i=0}^{n}\binom {n} {i}=2^n i=0n(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=km(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)=(k1n1)+(kn1) ( 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=0n(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)×(nin)=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={a11,a22,...,ann} ∑ 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} (n1m+n1)
如果对 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)xkynk
特别的,当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=1nxi=(ini)=nini!n!ixini
理解同二项式定理
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)n1=i=1nk(kn)xk1
代入 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=1nk(kn)=n2n1
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)n1=i=1nk(kn)xk1两边乘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)n1=i=1nk(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)n1+x(n1)(x+1)n2]=i=1nk2(kn)xk1
代入 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[2n1+(n1)2n2]=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=1nk2(kn)=n(n+1)2n2

六、容斥原理及其应用

基本容斥

先说明符号:交集符号 ∩ \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}| A1A2...Am=s(1)s1i1,i2...isAi1Ai2...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| uA1uA2...uAm=uA1A2...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)(n1)!
至少满足两个 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)(n2)!

全部满足 A i = i A_i=i Ai=i的方案数: ∣ S n ∣ = ( n n ) ∗ ( n − n ) ! |S_n|=\binom {n}{n}*(n-n)! Sn=(nn)(nn)!
答案为 ∣ ∁ 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}| uA1uA2...uAm=us(1)s1i1,i2...isAi1Ai2...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=1n(1)i(in)(ni)!=i=0n(1)ii!n!
这就是著名的错排公式了
又因为 e − 1 = ∑ 1 = 0 ∞ ( − 1 ) i 1 i ! e^{-1}=\sum_{1=0}^\infty (-1)^{i}\frac{1}{i!} e1=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!e10.36787944117

七、递推关系与生成函数

生成函数

生成函数就是把一个数列作为多项式的系数,一般是无穷项(如果数列非无穷向后补0),例如奇数数列生成函数为 ∑ i ≥ 0 ∞ ( i   m o d   2 ) x i \sum_{i\geq 0}^\infty (i\ mod\ 2)x_i i0(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=0xi=1x1
∑ i = 0 ∞ x i i ! = e x \sum_{i=0}^\infty \frac{x^i}{i!}=e^x i=0i!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==0xi=1xk1
根据上面容易推出奇数数列:
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+...)=1x2x
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} (1x)k1=i=0(ik)(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} (ik)=i!(k)(k1)...(ki+1)=(1)ii!k(k+1)...(k+i1)=(1)i(in+i1)
所以 ∑ 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(ik)(x)i=i=0(in+i1)xi
所以 ∑ i = 0 ∞ ( n + i − 1 i ) x i \sum_{i=0}^\infty\binom{n+i-1}{i}x_i i=0(in+i1)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+i1)xi=(1x)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=0i!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+exex(ex1)=2e3xe2x+ex1=21+n=02n!3n2n+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=0n1CiCni1
它们是一致的,证明。。。我太菜了,不会

它有许多具体含义,如:
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} Cn2
4.n个顶点的二叉树的形态数为 C n C_n Cn

可以看出1与2本质是一致的,可以推倒出公式1,其证明可见这位dalao的博客
3根4都可以推出一个递推式(公式2),就是卡特兰数。

第一类斯特林数

缓更。。。咕咕咕。。。。。。

第二类斯特林数

九、相异代表系

十、组合设计

十一、图论引导

十二、再论图论

十三、有向图和网络

都没讲。。。。。
(话说图论是组合数学??)
接下来是重点的Polya计数了

十四、Polya计数

你可能感兴趣的:(组合数学学习笔记)