一.Catalan数.
Catalan数:卡特兰数CnC_nCn表示nnn个000和nnn个111可以组成的不同序列的数量,其中这种序列必须满足每一个前缀中111数量必须不少于000的数量.
Catalan数的通项公式:
Cn=1n+1(2nn)
C_n=\frac{1}{n+1}\binom{2n}{n}
Cn=n+11(n2n)
证明:
我们把所有这样的nnn个111和000组成的不同序列全部列出来,这些数列的数量为(2nn)\binom{2n}{n}(n2n).
把所有破坏这种性质的序列都取出来,发现把它们第一个破坏性质的位置后的所有010101取反,然后我们可以得到一个n−1n-1n−1个111和n+1n+1n+1个000组成的序列.
同理这样的由n−1n-1n−1个000和n+1n+1n+1个111组成的序列也对应一个破坏性质的序列.
很容易发现这两种序列是一一对应关系,而n−1n-1n−1个111和n+1n+1n+1个000组成的不同序列数量为(2nn−1)\binom{2n}{n-1}(n−12n)种.最后推导一下:
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)−(n−12n)=n!n!(2n)!−(n−1)!(n+1)!(2n)!=(n+1)n!n!(n+1)(2n)!−n(2n)!=n+11(n2n)
证毕.
进出栈序列统计:有一个栈和nnn个互不相同元素,现在要求不改变它们的顺序让它们进栈与出栈,问出栈序列的方案数.
分析:将进栈看为111,出栈看为000,就与Catalan数的组合意义相同了,方案数即为CnC_nCn.
二.格路径数统计.
格路径计数:给定一张n∗nn*nn∗n的网格,每次走只能向右或者向上走一步,求从(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数组合意义中的111和000,方案数就为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)−(n−m−12n)
格路径计数拓展2:由n∗nn*nn∗n的网格变为n∗m(n<m)n*m(n<m)n∗m(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,n−m)不接触直线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}(m−1n+m).
于是答案就为:
(n+mm)−(n+mm−1)
\binom{n+m}{m}-\binom{n+m}{m-1}
(mn+m)−(m−1n+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}
Cn−1Cn=n1(n−12n−2)n+11(n2n)=n!(n−1)!(2n−2)!(n+1)!n!(2n)!=(2n−2)!(n+1)!n!(2n)!n!(n−1)!=n(n+1)2n(2n−1)=n2+n4n2−2n=n+14n−2
那么我们就有了Catalan数的递推式1:
Cn=(4n−2)Cn−1n+1
C_{n}=\frac{(4n-2)C_{n-1}}{n+1}
Cn=n+1(4n−2)Cn−1
初始条件为C0=1C_0=1C0=1.
四.拟Catalan数.
拟Catalan数:定义拟Catalan数Cn∗=n!Cn−1C_{n}^{*}=n!C_{n-1}Cn∗=n!Cn−1.
我们可以通过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!Cn−1=n!∗n4n−6∗Cn−2=(4n−6)Cn−1∗
初始条件C0∗=1C_{0}^{*}=1C0∗=1.
五.序列合并方案统计与Catalan数的另一个递推式.
序列合并方案统计1:对于一个长度为nnn的序列aia_iai,每次可以把两个数相乘,求将序列相乘成一个数的方案数.
分析:考虑递推,设长度为nnn的序列方案数为fnf_nfn,显然初态f0=1f_0=1f0=1.
对于fn−1f_{n-1}fn−1包含的每一种方案,我们考虑如何插入ana_nan.对于其中一个乘式(a∗b)(a*b)(a∗b),把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))
((an∗a)∗b)((a∗an)∗b)(a∗(an∗b))(a∗(b∗an))
总共有n−2n-2n−2个乘式,所以有4(n−2)fn−14(n-2)f_{n-1}4(n−2)fn−1的贡献.
另外,对于整一个式子,还有222种情况:
an∗aa∗an
a_n*a\\
a*a_n
an∗aa∗an
所以可以得到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(n−2)+2]fn−1=(4n−6)fn−1
我们发现这个数列的初态和递推公式均与拟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∗=Cn−1.
换一种分析方法:我们重新考虑fnf_nfn的一个更加暴力的转移:
fn=∑i=1n−1fifn−i
f_{n}=\sum_{i=1}^{n-1}f_{i}f_{n-i}
fn=i=1∑n−1fifn−i
而fn=Cn−1f_n=C_{n-1}fn=Cn−1,所以有:
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}
Cn−1=i=1∑n−1Ci−1Cn−1−i=i=0∑n−2CiCn−2−i
即:
Cn=∑i=0n−1CiCn−1−i
C_{n}=\sum_{i=0}^{n-1}C_{i}C_{n-1-i}
Cn=i=0∑n−1CiCn−1−i
这就是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=0∑n−1fifn−1−i
发现就是个Catalan数,答案即为CnC_{n}Cn.
凸多边形三角划分:将一个nnn个顶点的凸多边形用n−3n-3n−3条线段划分成n−2n-2n−2个三角形,求方案数.
分析:设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=0∑n−1fifn−1−i
发现还是Catalan数,那么答案就是Cn−2C_{n-2}Cn−2.
本文深入探讨Catalan数的定义、性质及其在序列合并、格路径计数、BST形态统计及凸多边形三角划分等问题中的应用。通过递推公式与组合意义解析,揭示其在算法设计与分析中的重要价值。
1557

被折叠的 条评论
为什么被折叠?



