Catalan数的应用与推导

表达式(通项公式):
Catalan(n)=1n+1(2nn)=(2n)!(n+1)! n!Catalan(n) = \frac{1}{n+1}\binom{2n}{n} = \frac{(2n)!}{(n+1)! \, n!}Catalan(n)=n+11(n2n)=(n+1)!n!(2n)!


Catalan数的经典应用如下:

  • 序列 {1,2,3,······,n} 的栈混洗个数
  • n 对括号所能组成的合法表达式数目(括号匹配)
  • 迪克路径(从 (0,0)(0,0)(0,0)(n,n)(n,n)(n,n),只能向右或向上走且不越过对角线 y=xy=xy=x的路径条数)
  • ···········

推导:

递推法:

以求n个括号匹配问题 T(n)T(n)T(n) 为例,设有n对括号,其中任意一对合法的括号表达式 SnS_nSn 都可以唯一地分解成 Sn=(Sk)Sn−k−1S_n=(S_k)S_{n-k-1}Sn=(Sk)Snk1 其中括号内外也均为合法表达式,那么此时 T(n)=T(k)∗T(n−k−1)T(n)=T(k)* T(n-k-1)T(n)=T(k)T(nk1) 对于每一个 kkk 的取值有 T(n)=∑k=0n−1T(k)∗T(n−k−1)T(n)=\sum_{k=0}^{n-1} T(k)* T(n-k-1)T(n)=k=0n1T(k)T(nk1)T(0)=T(1)=1T(0)=T(1)=1T(0)=T(1)=1解出T(n)=Catalan(n)T(n)=Catalan(n)T(n)=Catalan(n)


反射原理法:

同样以 nnn 对括号的合法匹配问题为例,设所有由 nnn 个左括号和 nnn 个右括号组成的序列总数为:
总数=(2nn) \text{总数} = \binom{2n}{n} 总数=(n2n)
这些序列中,有的在书写过程中会出现某一位置右括号数量多于左括号数量的情况,此类为不合法序列
我们令 T(n)T(n)T(n) 表示合法序列的数量,则:
T(n)=总数−不合法数 T(n) = \text{总数} - \text{不合法数} T(n)=总数不合法数
不合法序列的计数:
假设我们把左括号视为“向上走一步 (↑)” ,右括号视为“向右走一步 (→)” ,那么每个括号序列可对应为一条从 (0,0)(0,0)(0,0)(n,n)(n,n)(n,n) 的路径,且向上走的一定大于等于向右走的,即不从上方越过对角线。

对所有不合法路径,找到第一次越界点(即 y=x−1y=x-1y=x1 的第一个点),
从该点开始,将后续部分关于这条直线镜像反射,可得到一条从 (0,0)(0,0)(0,0)(n−1,n+1)(n-1,n+1)(n1,n+1) 的路径。
这种反射是一一对应的,因此:
不合法路径数=(2nn+1) \text{不合法路径数} = \binom{2n}{n+1} 不合法路径数=(n+12n)
因此:
T(n)=(2nn)−(2nn+1) T(n) = \binom{2n}{n} - \binom{2n}{n+1} T(n)=(n2n)(n+12n)
化简得:
T(n)=1n+1(2nn)=Catalan(n) T(n) = \frac{1}{n+1}\binom{2n}{n} = Catalan(n) T(n)=n+11(n2n)=Catalan(n)

(由chatgpt5辅助整理)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值