卡特兰数浅析

背景:之前不熟悉的知识点,所以现在来总结一下

概念

卡特兰数是一个经常出现在组合数学中的一个数列1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, ...
以比利时的数学家欧仁·查理·卡特兰的名字来命名。

经典场景解析

进出栈序列

题目描述

n 个元素进栈序列为:1,2,3,4,...,n,则有多少种出栈序列。
img

场景解析

在这个问题当中我们可以把进栈看成+1,出栈看成-1。
如出栈序列 1 3 2可以转换成 +1 -1 +1 +1 -1 -1
这样的话,一个合法的出栈序列就是其任意位置的前缀和大于等于0,整个序列+1和-1的数量相同
现在让我们来看一个 \(n=3\) 的序列 +1 -1 -1 +1 -1 +1
显然前三项的和小于0,这是一个非法的序列
如果我们把前三项位置符号取反,那么就会是-1 +1 +1,这时在整个序列中就有 4 个+1,2 个-1
由此可以得到一个一般性的结论:
对于非法序列A,一定存在第一个非法位置,并且此时前缀和为-1,将该位置及其之前的数符号都取反,得到的序列B一定有 \(n+1\) 个+1,\(n-1\) 个-1
可以证明:每一个非法序列A都和B一一对应
那么我们就可以反向求出问题的答案
首先我们知道所有的出栈序列数量为 \(C_{2n}^{n}\),其中非法序列的数量为 \(C_{2n}^{n+1}\)
所以答案就是 \(C_{2n}^{n}-C_{2n}^{n+1}=\frac{C_{2n}^{n}}{n+1}\)

括号序列

题目描述

n 对括号,则有多少种 “括号匹配” 的括号序列
img

场景解析

如果我们把左括号看成+1,右括号看成-1,那么问题就转换成了进出栈序列了

电影购票

题目描述

电影票一张 50 coin,且售票厅没有 coin。m 个人各自持有 50 coin,n 个人各自持有 100 coin。
则有多少种排队方式,可以让每个人都买到电影票。

场景解析

依然依据出栈序列的解题思路,持有100coin可以看成-1,因为每次付100coin都需要50coin的匹配,所以50coin可以看成+1
那么一个非法序列操作过后应该是 \(m+1\) 个+1,\(n-1\) 个-1
由于是排列数,答案就是
\((C_{m+n}^{m}-C_{m+n}^{m+1}) \times m! \times n!\)

总结

根据上述的场景我们其实可以看出卡特兰数的序列公式其实就是 \(C_{2n}^{n}-C_{2n}^{n+1}=\frac{C_{2n}^{n}}{n+1}\)
然而由于时间复杂度的原因,有时不一定会采用上述公式
卡特兰数的递推式 \(C_1 = 1,C_n = C_{n-1} \times \frac {4 \times n - 2}{n + 1}\)
但是需要注意
+1和-1数量不等是不能利用此递推式子的,如上述的电影购票问题,此时并不满足卡特兰数的性质
总的来说,卡特兰数所解决的问题一般都可以转换成+1和-1匹配的问题,当计数问题中存在这种关系时,我们就可以往这方面考虑
除此之外,还有国际二叉树和搜索二叉树也和卡特兰数有关,感兴趣的朋友可以自行研究

参考:知乎专栏

posted @ 2022-11-10 16:51  Sun-Wind  阅读(116)  评论(0编辑  收藏  举报