Catalan卡特兰数

一篇优秀的卡特兰数详解,里面有些具体模型和推导是我这篇博客所没有的

最最最经典的例题运用:设栈S初始状态为空,有五个序列一次入栈,出栈序列有(42)种。

C a t a l a n Catalan Catalan = C 2 n n n + 1 \frac{\textrm{C}_{2n}^{n}}{n+1} n+1C2nn

卡特兰数:

通项公式 C n \textrm{C}_{n} Cn = = = 1 n + 1 \frac{1}{n+1} n+11 ( 2 n n ) \binom{2n}{n} (n2n) = = = ( 2 n ) ! ( n + 1 ) ! n ! \frac{(2n)!}{(n+1)!n!} (n+1)!n!(2n)!

递推公式 C n \textrm{C}_{n} Cn = C 0 \textrm{C}_{0} C0 * C n − 1 \textrm{C}_{n-1} Cn1+ C 1 \textrm{C}_{1} C1 * C n − 2 \textrm{C}_{n-2} Cn2+ …… + C n − 1 \textrm{C}_{n-1} Cn1 * C 0 \textrm{C}_{0} C0

用一个应用证明通项公式

题目
一个栈(无穷大)的进栈序列为 1 , 2 , 3 , … , n 1,2,3,…,n 123n,有多少个不同的出栈序列?

证明
对于每一个数来说,必须进栈一次、出栈一次。
我们把进栈设为状态 ‘ 1 ’ ‘1’ 1,出栈设为状态 ‘ 0 ’ ‘0’ 0
n n n 个数的所有状态对应 n n n 1 1 1 n n n 0 0 0 组成的 2 n 2n 2n 位二进制数
1 1 1 的累计数不小于 0 0 0 的累计数的方案数。
2 n 2n 2n 位二进制数中填入 n n n 1 1 1 的方案数为 C 2 n n \textrm{C}_{2n}^{n} C2nn

从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。
不符合要求的数的特征是由左而右扫描时,
必然在某一奇数位 2 m + 1 2m+1 2m+1 位上首先出现 m + 1 m+1 m+1 0 0 0 的累计数和 m m m 1 1 1 的累计数
此后的 2 ( n − m ) − 1 2(n-m)-1 2(nm)1 位上有 n − m n-m nm 1 1 1 n − m − 1 n-m-1 nm1 0 0 0
如若把后面这 2 ( n − m ) − 1 2(n-m)-1 2(nm)1 位上的 0 0 0 1 1 1 互换,使之成为 n − m n-m nm 0 0 0 n − m − 1 n-m-1 nm1 1 1 1
结果得由 n + 1 n+1 n+1 0 0 0 n − 1 n-1 n1 1 1 1 组成的 2 n 2n 2n 位数
即一个不合要求的数对应于一个由 n + 1 n+1 n+1 0 0 0 n − 1 n-1 n1 1 1 1 组成的排列。

反过来,任何一个由 n + 1 n+1 n+1 0 0 0 n − 1 n-1 n1 1 1 1 组成的 2 n 2n 2n 位二进制数
由于 0 0 0 的个数多 2 2 2 个, 2 n 2n 2n 为偶数,故必在某一个奇数位上出现 0 0 0 的累计数超过 1 1 1 的累计数。
同样在后面部分 0 0 0 1 1 1 互换,使之成为由 n n n 0 0 0 n n n 1 1 1 组成的 2 n 2n 2n 位数,
n + 1 n+1 n+1 0 0 0 n − 1 n-1 n1 1 1 1 组成的 2 n 2n 2n 位数必对应一个不符合要求的数。
因而不合要求的 2 n 2n 2n 位数与 n + 1 n+1 n+1 0 0 0 n - 1 n-1 n1 1 1 1 组成的排列一一对应。

显然,不符合要求的方案数为 C 2 n n − 1 \textrm{C}_{2n}^{n-1} C2nn1

由此得出输出序列的总数目= C 2 n n \textrm{C}_{2n}^{n} C2nn- C 2 n n − 1 \textrm{C}_{2n}^{n-1} C2nn1= C 2 n n n + 1 \frac{\textrm{C}_{2n}^{n}} {n+1} n+1C2nn
在这里插入图片描述

应用:

在这里插入图片描述
括号化
题目:
矩阵链乘: P = a 1 × a 2 × a 3 × … … × a n P=a1×a2×a3×……×an P=a1×a2×a3××an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?
在这里插入图片描述

出栈次序

一个栈(无穷大)的进栈序列为 1 , 2 , 3 , … , n 1,2,3,…,n 123n,有多少个不同的出栈序列?

<分析>
f ( n ) f(n) fn为序列个数为 n n n 的出栈序列种数。
假定最后出栈的元素为 k k k,在 k k k入栈之前,比 k k k小的值均出栈,此处情况有 f ( k − 1 ) f(k-1) f(k1)
而之后比 k k k大的值入栈,且都在 k k k之前出栈,因此有 f ( n − k ) f(n-k) f(nk)种方式
所以 f ( k ) = f ( n − k ) ∗ f ( k − 1 ) f(k) = f(n-k)*f(k-1) f(k)=f(nk)f(k1),而k可以选1到n
所以 f ( n ) = f ( 0 ) f ( n − 1 ) + f ( 1 ) f ( n − 2 ) + … … + f ( n − 1 ) f ( 0 ) f(n)=f(0)f(n-1)+f(1)f(n-2)+……+f(n-1)f(0) fn=f0fn1+f1fn2++fn1f0
在这里插入图片描述
买票找零
2 n 2n 2n个人排成一行进入剧场。入场费5元。其中n人有5元钞票,n人有10元钞票,剧院无其它钞票,问有多少种方法使得只要有10元的人买票,售票处就有5元的钞票找零?

<分析>
将5元视作入栈,10元视作出栈
在这里插入图片描述
凸多边形三角划分
在凸n边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形,求不同划分的方案数 f ( n ) f(n) f(n)

<分析>
以某一条边为基准,以这条边的两个顶点为起点 P 1 P1 P1和终点 P P Pn
将该凸多边形的顶点依序标记为 P 1 、 P 2 、 … … 、 P n P1、P2、……、Pn P1P2Pn
再在该凸多边形中找任意一个不属于这两个点的顶点 P k Pk Pk,来构成一个三角形
用这个三角形把一个凸多边形划分成两个凸多边形
其中一个凸多边形,是由 P 1 , P 2 , … … , P k P1,P2,……,Pk P1P2Pk构成的凸k边形
另一个凸多边形,是由 P k , P k + 1 , … … , P n Pk,Pk+1,……,Pn PkPk+1Pn构成的凸n-k+1边形。
把Pk视为确定一点, f ( n ) = f ( k ) ∗ f ( n − k + 1 ) f(n)=f(k)*f(n-k+1) f(n)=f(k)f(nk+1),而k可以选2到n-1,所以总方案数为:
f ( n ) = f ( 2 ) f ( n − 2 + 1 ) + f ( 3 ) f ( n − 3 + 1 ) + … … + f ( n − 1 ) f ( 2 ) f(n)=f(2)f(n-2+1)+f(3)f(n-3+1)+……+f(n-1)f(2) fn=f2fn2+1+f3fn3+1++fn1f2
在这里插入图片描述
方格地图
n ∗ n n*n nn的方格地图,从一个角到对角线的另一个角,不跨越对角线的路径数。

<分析>
若从左下角到右上角,相当于往上 n n n,往右 n n n,且往上的次数不能超过往右的,与上面买票同解。
在这里插入图片描述
圆上划线
在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?
在这里插入图片描述
n对括号正确匹配数目
给定n对括号,求括号正确配对的字符串数
例如:
0对括号:[空序列] 1种可能
1对括号:() 1种可能
2对括号:()() (()) 2种可能
3对括号:((())) ()(()) ()()() (())() (()()) 5种可能

<分析>
考虑 n n n 对括号时的任意一种配对方案
最后一个右括号有唯一的与之匹配的左括号,于是有唯一的表示A(B),其中A和B也是合法的括号匹配序列
假设 S ( n ) S(n) S(n) n n n对括号的正确配对数目,
那么有递推关系 S ( n ) = S ( 0 ) S ( n − 1 ) + S ( 1 ) S ( n − 2 ) + . . . + S ( n − 1 ) S ( 0 ) S(n)=S(0)S(n-1)+S(1)S(n-2) +...+S(n-1)S(0) S(n)=S(0)S(n1)+S(1)S(n2)+...+S(n1)S(0)
在这里插入图片描述
二叉树
n n n 个不同点可以构造多少棵不同的二叉树
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值