Catalan数学习笔记

一.Catalan数.

Catalan数:卡特兰数 C n C_n Cn表示 n n n 0 0 0 n n n 1 1 1可以组成的不同序列的数量,其中这种序列必须满足每一个前缀中 1 1 1数量必须不少于 0 0 0的数量.

Catalan数的通项公式
C n = 1 n + 1 ( 2 n n ) C_n=\frac{1}{n+1}\binom{2n}{n} Cn=n+11(n2n)

证明:
我们把所有这样的 n n n 1 1 1 0 0 0组成的不同序列全部列出来,这些数列的数量为 ( 2 n n ) \binom{2n}{n} (n2n).
把所有破坏这种性质的序列都取出来,发现把它们第一个破坏性质的位置后的所有 01 01 01取反,然后我们可以得到一个 n − 1 n-1 n1 1 1 1 n + 1 n+1 n+1 0 0 0组成的序列.
同理这样的由 n − 1 n-1 n1 0 0 0 n + 1 n+1 n+1 1 1 1组成的序列也对应一个破坏性质的序列.
很容易发现这两种序列是一一对应关系,而 n − 1 n-1 n1 1 1 1 n + 1 n+1 n+1 0 0 0组成的不同序列数量为 ( 2 n n − 1 ) \binom{2n}{n-1} (n12n)种.最后推导一下:
C n = ( 2 n n ) − ( 2 n n − 1 ) = ( 2 n ) ! n ! n ! − ( 2 n ) ! ( n − 1 ) ! ( n + 1 ) ! = ( n + 1 ) ( 2 n ) ! − n ( 2 n ) ! ( n + 1 ) n ! n ! = 1 n + 1 ( 2 n n ) C_n=\binom{2n}{n}-\binom{2n}{n-1}=\frac{(2n)!}{n!n!}-\frac{(2n)!}{(n-1)!(n+1)!}=\frac{(n+1)(2n)!-n(2n)!}{(n+1)n!n!}=\frac{1}{n+1}\binom{2n}{n} Cn=(n2n)(n12n)=n!n!(2n)!(n1)!(n+1)!(2n)!=(n+1)n!n!(n+1)(2n)!n(2n)!=n+11(n2n)

证毕.

进出栈序列统计:有一个栈和 n n n个互不相同元素,现在要求不改变它们的顺序让它们进栈与出栈,问出栈序列的方案数.

分析:将进栈看为 1 1 1,出栈看为 0 0 0,就与Catalan数的组合意义相同了,方案数即为 C n C_n Cn.


二.格路径数统计.

格路径计数:给定一张 n ∗ n n*n nn的网格,每次走只能向右或者向上走一步,求从 ( 0 , 0 ) (0,0) (0,0)走到 ( n , n ) (n,n) (n,n)不越过对角线 y = x y=x y=x,求方案数.

分析:将棋盘按照对角线分为两部分,两部分的方案一一对应,现在只考虑其中的右下部分.

现在把向右走看为向量 ( 1 , 0 ) (1,0) (1,0),向上走看为向量 ( 0 , 1 ) (0,1) (0,1),那么显然两个向量 ( 1 , 0 ) (1,0) (1,0) ( 0 , 1 ) (0,1) (0,1)分别对应Catalan数组合意义中的 1 1 1 0 0 0,方案数就为 C n C_{n} Cn,乘 2 2 2后得到答案 2 C n 2C_{n} 2Cn.

格路径计数拓展1:不越过的对角线变为直线 y = x + m y=x+m y=x+m,,求方案数.

与上面Calatan数的通项公式类似的,答案为:
( 2 n n ) − ( 2 n n − m − 1 ) \binom{2n}{n}-\binom{2n}{n-m-1} (n2n)(nm12n)

格路径计数拓展2:由 n ∗ n n*n nn的网格变为 n ∗ m ( n < m ) n*m(n<m) nm(n<m)的网格,求方案数.

分析:转化为一张网格上通过向量 ( 1 , 1 ) (1,1) (1,1) ( 1 , − 1 ) (1,-1) (1,1) ( 0 , 0 ) (0,0) (0,0)走到 ( n + m , n − m ) (n+m,n-m) (n+m,nm)不接触直线 y = − 1 y=-1 y=1的方案数.

通过补集转化,答案变成总方案数减去经过 y = − 1 y=-1 y=1的方案数,显然的总方案数为 ( n + m m ) \binom{n+m}{m} (mn+m).

再把原点 ( 0 , 0 ) (0,0) (0,0)到第一次接触 y = − 1 y=-1 y=1的那一段沿 y = − 1 y=-1 y=1对称,方案一一对应,且此时向量 ( 1 , 1 ) (1,1) (1,1)多了一个,向量 ( 1 , − 1 ) (1,-1) (1,1)少了一个,所以方案数为 ( n + m m − 1 ) \binom{n+m}{m-1} (m1n+m).

于是答案就为:
( n + m m ) − ( n + m m − 1 ) \binom{n+m}{m}-\binom{n+m}{m-1} (mn+m)(m1n+m)



三.Catalan数的一阶递推式.

根据Catalan数的通项公式,我们可以推导:
C n C n − 1 = 1 n + 1 ( 2 n n ) 1 n ( 2 n − 2 n − 1 ) = ( 2 n ) ! ( n + 1 ) ! n ! ( 2 n − 2 ) ! n ! ( n − 1 ) ! = ( 2 n ) ! n ! ( n − 1 ) ! ( 2 n − 2 ) ! ( n + 1 ) ! n ! = 2 n ( 2 n − 1 ) n ( n + 1 ) = 4 n 2 − 2 n n 2 + n = 4 n − 2 n + 1 \frac{C_n}{C_{n-1}}=\frac{\frac{1}{n+1}\binom{2n}{n}}{\frac{1}{n}\binom{2n-2}{n-1}}\\ =\frac{\frac{(2n)!}{(n+1)!n!}}{\frac{(2n-2)!}{n!(n-1)!}}\\ =\frac{(2n)!n!(n-1)!}{(2n-2)!(n+1)!n!}\\ =\frac{2n(2n-1)}{n(n+1)}\\ =\frac{4n^2-2n }{n^2+n}\\ =\frac{4n-2}{n+1} Cn1Cn=n1(n12n2)n+11(n2n)=n!(n1)!(2n2)!(n+1)!n!(2n)!=(2n2)!(n+1)!n!(2n)!n!(n1)!=n(n+1)2n(2n1)=n2+n4n22n=n+14n2

那么我们就有了Catalan数的递推式1
C n = ( 4 n − 2 ) C n − 1 n + 1 C_{n}=\frac{(4n-2)C_{n-1}}{n+1} Cn=n+1(4n2)Cn1

初始条件为 C 0 = 1 C_0=1 C0=1.


四.拟Catalan数.

拟Catalan数:定义拟Catalan数 C n ∗ = n ! C n − 1 C_{n}^{*}=n!C_{n-1} Cn=n!Cn1.

我们可以通过Catalan数的递推公式来推出拟Catalan数的递推公式
C n ∗ = n ! C n − 1 = n ! ∗ 4 n − 6 n ∗ C n − 2 = ( 4 n − 6 ) C n − 1 ∗ C_{n}^{*}=n!C_{n-1}=n!*\frac{4n-6}{n}*C_{n-2}=(4n-6)C_{n-1}^{*} Cn=n!Cn1=n!n4n6Cn2=(4n6)Cn1

初始条件 C 0 ∗ = 1 C_{0}^{*}=1 C0=1.


五.序列合并方案统计与Catalan数的另一个递推式.

序列合并方案统计1:对于一个长度为 n n n的序列 a i a_i ai,每次可以把两个数相乘,求将序列相乘成一个数的方案数.

分析:考虑递推,设长度为 n n n的序列方案数为 f n f_n fn,显然初态 f 0 = 1 f_0=1 f0=1.

对于 f n − 1 f_{n-1} fn1包含的每一种方案,我们考虑如何插入 a n a_n an.对于其中一个乘式 ( a ∗ b ) (a*b) (ab),把 a n a_n an插入进去会有以下 4 4 4种情况:
( ( a n ∗ a ) ∗ b ) ( ( a ∗ a n ) ∗ b ) ( a ∗ ( a n ∗ b ) ) ( a ∗ ( b ∗ a n ) ) ((a_n*a)*b)\\ ((a*a_n)*b)\\ (a*(a_n*b))\\ (a*(b*a_n)) ((ana)b)((aan)b)(a(anb))(a(ban))

总共有 n − 2 n-2 n2个乘式,所以有 4 ( n − 2 ) f n − 1 4(n-2)f_{n-1} 4(n2)fn1的贡献.

另外,对于整一个式子,还有 2 2 2种情况:
a n ∗ a a ∗ a n a_n*a\\ a*a_n anaaan

所以可以得到 f n f_n fn的递推式:
f n = [ 4 ( n − 2 ) + 2 ] f n − 1 = ( 4 n − 6 ) f n − 1 f_n=[4(n-2)+2]f_{n-1}=(4n-6)f_{n-1} fn=[4(n2)+2]fn1=(4n6)fn1

我们发现这个数列的初态和递推公式均与拟Catalan数相同,所以这个问题的方案数就是 C n ∗ C_{n}^{*} Cn.

序列合并方案统计2:对于一个长度为 n n n的序列 a i a_i ai,每次可以把相邻两个数相乘,求将序列相乘成一个数的方案数.

分析:显然对于统计问题1,总会有 n ! n! n!方案对应着统计问题2中的同一种方案,那么答案就是 C n ∗ n ! = C n − 1 \frac{C_{n}^{*}}{n!}=C_{n-1} n!Cn=Cn1.

换一种分析方法:我们重新考虑 f n f_n fn的一个更加暴力的转移:
f n = ∑ i = 1 n − 1 f i f n − i f_{n}=\sum_{i=1}^{n-1}f_{i}f_{n-i} fn=i=1n1fifni

f n = C n − 1 f_n=C_{n-1} fn=Cn1,所以有:
C n − 1 = ∑ i = 1 n − 1 C i − 1 C n − 1 − i = ∑ i = 0 n − 2 C i C n − 2 − i C_{n-1}=\sum_{i=1}^{n-1}C_{i-1}C_{n-1-i}\\ =\sum_{i=0}^{n-2}C_{i}C_{n-2-i} Cn1=i=1n1Ci1Cn1i=i=0n2CiCn2i

即:
C n = ∑ i = 0 n − 1 C i C n − 1 − i C_{n}=\sum_{i=0}^{n-1}C_{i}C_{n-1-i} Cn=i=0n1CiCn1i

这就是Catalan数的递推公式2.


六.BST方案统计与凸多边形三角划分.

BST方案统计:给定 n n n个点权,问对应BST的形态有多少种.

分析:设 f n f_n fn表示 n n n个点组成的BST形态数量,那么我们可以枚举根的左子树大小,得到方程:
f n = ∑ i = 0 n − 1 f i f n − 1 − i f_n=\sum_{i=0}^{n-1}f_{i}f_{n-1-i} fn=i=0n1fifn1i

发现就是个Catalan数,答案即为 C n C_{n} Cn.

凸多边形三角划分:将一个 n n n个顶点的凸多边形用 n − 3 n-3 n3条线段划分成 n − 2 n-2 n2个三角形,求方案数.

分析:设 f n f_n fn表示将 n + 2 n+2 n+2个顶点组成的凸多边形划分成 n n n个三角形的方案数,可以直接转移:
f n = ∑ i = 0 n − 1 f i f n − 1 − i f_n=\sum_{i=0}^{n-1}f_{i}f_{n-1-i} fn=i=0n1fifn1i

发现还是Catalan数,那么答案就是 C n − 2 C_{n-2} Cn2.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值