Catalan数学习笔记

本文深入探讨Catalan数的定义、性质及其在序列合并、格路径计数、BST形态统计及凸多边形三角划分等问题中的应用。通过递推公式与组合意义解析,揭示其在算法设计与分析中的重要价值。

一.Catalan数.

Catalan数:卡特兰数CnC_nCn表示nnn000nnn111可以组成的不同序列的数量,其中这种序列必须满足每一个前缀中111数量必须不少于000的数量.

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

证明:
我们把所有这样的nnn111000组成的不同序列全部列出来,这些数列的数量为(2nn)\binom{2n}{n}(n2n).
把所有破坏这种性质的序列都取出来,发现把它们第一个破坏性质的位置后的所有010101取反,然后我们可以得到一个n−1n-1n1111n+1n+1n+1000组成的序列.
同理这样的由n−1n-1n1000n+1n+1n+1111组成的序列也对应一个破坏性质的序列.
很容易发现这两种序列是一一对应关系,而n−1n-1n1111n+1n+1n+1000组成的不同序列数量为(2nn−1)\binom{2n}{n-1}(n12n)种.最后推导一下:
Cn=(2nn)−(2nn−1)=(2n)!n!n!−(2n)!(n−1)!(n+1)!=(n+1)(2n)!−n(2n)!(n+1)n!n!=1n+1(2nn) 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)

证毕.

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

分析:将进栈看为111,出栈看为000,就与Catalan数的组合意义相同了,方案数即为CnC_nCn.


二.格路径数统计.

格路径计数:给定一张n∗nn*nnn的网格,每次走只能向右或者向上走一步,求从(0,0)(0,0)(0,0)走到(n,n)(n,n)(n,n)不越过对角线y=xy=xy=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数组合意义中的111000,方案数就为CnC_{n}Cn,乘222后得到答案2Cn2C_{n}2Cn.

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

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

格路径计数拓展2:由n∗nn*nnn的网格变为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=−1y=-1y=1的方案数.

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

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

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



三.Catalan数的一阶递推式.

根据Catalan数的通项公式,我们可以推导:
CnCn−1=1n+1(2nn)1n(2n−2n−1)=(2n)!(n+1)!n!(2n−2)!n!(n−1)!=(2n)!n!(n−1)!(2n−2)!(n+1)!n!=2n(2n−1)n(n+1)=4n2−2nn2+n=4n−2n+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
Cn=(4n−2)Cn−1n+1 C_{n}=\frac{(4n-2)C_{n-1}}{n+1} Cn=n+1(4n2)Cn1

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


四.拟Catalan数.

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

我们可以通过Catalan数的递推公式来推出拟Catalan数的递推公式
Cn∗=n!Cn−1=n!∗4n−6n∗Cn−2=(4n−6)Cn−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

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


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

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

分析:考虑递推,设长度为nnn的序列方案数为fnf_nfn,显然初态f0=1f_0=1f0=1.

对于fn−1f_{n-1}fn1包含的每一种方案,我们考虑如何插入ana_nan.对于其中一个乘式(a∗b)(a*b)(ab),把ana_nan插入进去会有以下444种情况:
((an∗a)∗b)((a∗an)∗b)(a∗(an∗b))(a∗(b∗an)) ((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−2n-2n2个乘式,所以有4(n−2)fn−14(n-2)f_{n-1}4(n2)fn1的贡献.

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

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

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

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

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

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

fn=Cn−1f_n=C_{n-1}fn=Cn1,所以有:
Cn−1=∑i=1n−1Ci−1Cn−1−i=∑i=0n−2CiCn−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

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

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


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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值