卡特兰数及常见模型

卡特兰数

英文名Catalan number, 是组合数学中一个常出现在各种计数问题中出现的数列。其前几项为:
1 1 2 5 14 42 132 429 1430 4862 16796 58786 208012 742900 2674440 9694845 35357670 129644790 477638700 1767263190 6564120420 24466267020 91482563640
343059613650 1289904147324 4861946401452…

通项公式

卡特兰数的通项公式不止一种 k ( 0 ) = 1 ,    k ( 1 ) = 1 k(0)= 1, \;k(1)= 1 k(0)=1,k(1)=1 ,如果接下来的项满足以下三种公式中的一种就是卡特兰数

  1. k ( n ) = k ( 0 ) × k ( n − 1 ) + k ( 1 ) × k ( n − 2 ) + ⋅ ⋅ ⋅ + k ( n − 2 ) × k ( 1 ) + k ( n − 1 ) × k ( 0 ) k(n) = k(0) \times k(n- 1) + k(1) \times k(n- 2)+ \cdot\cdot\cdot +k(n- 2) \times k(1) + k(n- 1) \times k(0) k(n)=k(0)×k(n1)+k(1)×k(n2)++k(n2)×k(1)+k(n1)×k(0)
  2. k ( n ) = C 2 n n − C 2 n n − 1 k(n)= C_{2n}^n - C_{2n}^{n-1} k(n)=C2nnC2nn1
  3. k ( n ) = C 2 n n n + 1 k(n)= \frac{C_{2n}^n}{n+1} k(n)=n+1C2nn 这个公式就是复习408时背的n个元素进栈,有多少种出栈排列结果

常用的是范式1和2,3几乎不会使用到

括号匹配问题

这个问题模型非常重要,它包含了如何套用卡特兰数并且包含了一种重要的数学性质,有很多问题如果能转换成括号匹配模型就迎刃而解了。

问题描述 给你n个左括号( 和n个右括号) ,有多少种合法的摆放序列?

首先要回答最关键的问题:什么叫做不合法?一个长度为2n的字符串中,只要有任意一个前缀是:右括号的数量比左括号的数量多1,就说这个排列是不合法的 eg: (    )    )    (    (    )    ) (\;)\;)\;(\;(\;)\;) ())(()) 就是不合法的,因为其前缀()) 违规。

所以,要求有多少种合法的排序,我们只需要用总的排列种数减去不合法的种数 现在问题就转化成了:有多少种不合法的排列 总的排列数很好算,是: C 2 n n C_{2n}^n C2nn 2n个位置中任意选n个位置放左括号。

现在要引入一个非常重要的数学概念等势。假如有集合A,B,存在一个一一映射 f f f ,使得A中的每个元素都能映射到B中的唯一一个元素。由此可以得到: A 的元素数量 ≤ B 的元素数量 A的元素数量 \le B的元素数量 A的元素数量B的元素数量;如果同样存在这样一个由B到A的映射 g g g ,那么就有: B 的元素数量 ≤ A 的元素数量 B的元素数量 \le A的元素数量 B的元素数量A的元素数量 结合来看就有: A 的元素数量 = B 的元素数量 A的元素数量 = B的元素数量 A的元素数量=B的元素数量

假设2n个括号中所有不合法的排列为集合A,我们现在就是要找和A等势的集合B。我们可以这样定义 f f f

任意一个不合法的排列,必定存在一个最短前缀使得右括号比左括号多1,找到这个最短前缀,假设其长度为 2 m + 1 2m+1 2m+1 ,必然是奇数长度,对于剩下所有的 2 n − ( 2 m + 1 ) 2n-(2m+1) 2n(2m+1) 个括号,让左括号变右括号,右括号变左括号。如下表:

最短前缀剩下部分(变化前)剩下部分(变化后)
长度2m+12n-2m-12n-2m-1
左括号数量mn-mn-m-1
右括号数量m+1n-m-1n-m

所以变化后的整个字符串最短前缀那部分是不变的,变动的是后部分,并且总体上左括号有: n − 1 n-1 n1

右括号有: n + 1 n+1 n+1 。这样 f f f 定义好后, g g g 也可以水到渠成地得到,将这个字符串找出最短的违规前缀,让

剩余部分右变左,左变右就能得到原始串,并且是一一对应,所以我们找到了A的等势集合B,集合B是什么呢? 集合B就是总共2n个括号,n-1个左括号,n+1个右括号的所有排列,我们找到了这个集合B,并且还证明了和我们想求的集合A是等势的,但是集合B的大小非常好得到就是: C 2 n n − 1 C_{2n}^{n-1} C2nn1 ,所以最终的答案就是:

C 2 n n − C 2 n n − 1 C_{2n}^n - C_{2n}^{n-1} C2nnC2nn1 这就是通项公式2

其他一些可以转化成括号匹配模型的问题

n个元素入栈,有多少种出栈次序 可以把进栈想成 ↓ 出栈想成 ↑,n个元素进栈,最后也是出栈n次,所以总长度为2n,是不是任意时刻出栈次数都不能超过进栈次数,也就是说最终的整个长度为2n的序列,任意前缀都不能有↑超过↓,是不是和括号匹配一模一样的?

一个公司的股票走势要么是上涨↗️,要么是下降↘️,不管是什么走势,和水平线的夹角都是45度,每个时刻都有一个走势,那么n时刻时,该走势图进入第四象限的可能? 也是在问括号的结合方式

一共有n个结点,问可以组成多少种不同的二叉树 k ( 0 ) = 0 ,    k ( 1 ) = 1 ,    k ( 2 ) = 2 k(0)=0, \; k(1)=1, \; k(2)=2 k(0)=0,k(1)=1,k(2)=2 n>2时,要这样考虑:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKQuJprX-1677735047632)(/Users/ymy/Library/Application Support/typora-user-images/image-20221020221801662.png)]

根结点必然是包含1个结点的,就是左边0个,右边n-1个。。。。每一种的组合方式累加起来,就得到结果了,虽然 k ( 0 ) × k ( n − 1 ) = k ( n − 1 ) × k ( 0 ) k(0) \times k(n-1) = k(n-1) \times k(0) k(0)×k(n1)=k(n1)×k(0) 但是在二叉树中,形状不同就是不同。所以就有:

k ( n ) = k ( 0 ) × k ( n − 1 ) + k ( 1 ) × k ( n − 2 ) + ⋅ ⋅ ⋅ + k ( n − 2 ) × k ( 1 ) + k ( n − 1 ) × k ( 0 ) k(n) = k(0) \times k(n- 1) + k(1) \times k(n- 2)+ \cdot\cdot\cdot +k(n- 2) \times k(1) + k(n- 1) \times k(0) k(n)=k(0)×k(n1)+k(1)×k(n2)++k(n2)×k(1)+k(n1)×k(0)

这不就是卡特兰数通项公式1嘛

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值