组合数学入门
卡特兰数
以下摘自OI-wiki:
- 一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?
- 在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?
- 对角线不相交的情况下,将一个凸多边形区域分成三角形区域的方法数?
- n个结点可构造多少个不同的二叉树?
- ...
通 项 公 式 \textbf通项公式 通项公式 H ( n ) = ( 2 n n ) − ( 2 n n + 1 ) = ( 2 n n ) ∗ 1 n + 1 = 1 n + 1 ∑ i = 0 n ( n i ) 2 H(n)=\left(\begin{matrix}2n \\ n\end{matrix}\right)-\left(\begin{matrix}2n \\ n+1\end{matrix}\right)=\left(\begin{matrix}2n \\ n\end{matrix}\right)*\frac{1}{n+1}=\frac{1}{n+1}\sum_{i=0}^n\left(\begin{matrix}n \\ i \end{matrix}\right)^2 H(n)=(2nn)−(2nn+1)=(2nn)∗n+11=n+11∑i=0n(ni)2
递 推 式 递推式 递推式 H ( n ) = H ( n − 1 ) ∗ 4 ∗ n − 2 n + 1 H(n)=H(n-1)*\frac{4*n-2}{n+1} H(n)=H(n−1)∗n+14∗n−2
定 义 式 \textbf定义式 定义式 $H(n)=\sum_{i=1}^{n} H(i-1)*H(n-i)\quad n>2\H(n)=1\quad n=0,1 $
斯特林数
第一类斯特林数
定义:记为 S 1 ( n , k ) S_1(n,k) S1(n,k),计算将n个元素排成k个非空圆排列的方案数。
递推式: S 1 ( n , k ) = ( n − 1 ) S 1 ( n − 1 , k ) + S 1 ( n − 1 , k − 1 ) S ! ( 0 , 0 ) = 1 , S 1 ( n , 0 ) = 0 S_{1}(n,k)=(n-1)S_{1}(n-1,k)+S_{1}(n-1,k-1) \quad S_!(0,0)=1,S_1(n,0)=0 S1(n,k)=(n−1)S1(n−1,k)+S1(n−1,k−1)S!(0,0)=1,S1(n,0)=0
公式: ∑ k = 0 n S 1 ( n , k ) = n ! ( 可 以 理 解 为 所 有 置 换 个 数 为 总 排 列 数 ) \sum_{k=0}^{n}S_{1}(n,k)=n!(可以理解为所有置换个数为总排列数) ∑k=0nS1(n,k)=n!(可以理解为所有置换个数为总排列数)
第二类斯特林数
定义:记为 S 2 ( n , k ) S_2(n,k) S2(n,k),表示将n个元素划分为k个非空子集的方案数。
递推式: S 2 ( n , k ) = k S 2 ( n − 1 , k ) + S 2 ( n − 1 , k − 1 ) S 2 ( n , 0 ) = 0 , S 2 ( n , 1 ) = 1 n > 0 S_{2}(n,k)=kS_{2}(n-1,k)+S_{2}(n-1,k-1) \quad S_2(n,0)=0,S_2(n,1)=1 \quad n>0 S2(n,k)=kS2(n−1,k)+S2(n−1,k−1)S2(n,0)=0,S2(n,1)=1n>0
通项公式: m ! S 2 ( n , m ) = ∑ k = 0 m ( − 1 ) k C ( m , k ) ( m − k ) n m!S_{2}(n,m)=\sum_{k=0}^{m}(-1)^kC(m,k)(m-k)^n m!S2(n,m)=∑k=0m(−1)kC(m,k)(m−k)n
注意到通项公式为卷积形式,可以用NTT,nlogn时间内处理斯特林数。(待补)
还有一些较为复杂,一般与多项式联系,待学。
贝尔数
定义:记为 B n B_n Bn,表示1~n划分为不同非空集合的方案数
递推式: B n + 1 = ∑ k = 0 n ( n k ) B k B_{n+1}=\sum_{k=0}^{n}\binom{n}{k}B_k Bn+1=∑k=0n(kn)Bk
另外注意到贝尔数其实是第二类斯特林数的和。
贝尔三角形:
用以下方法建构一个三角矩阵:
(1) 第一行第一项是1
(2) 对于n>1,第n行第一项等同第n-1行最后一项。
(3) 对于m,n>1,第n行第m项等于它左边和左上方的两个数之和。(
a
n
,
m
=
a
n
,
m
−
1
+
a
n
−
1
,
m
−
1
a_{n,m}=a_{n,m-1}+a_{n-1,m-1}
an,m=an,m−1+an−1,m−1)
每行的首项是贝尔数