一些常见的数列问题
卡特兰数
卡特兰数本质就是组合数学中经常出现在计数问题中的数列。他的本质其实是表达一类关系。但是在实际应用中,其实我们还是更关心他的实际价值。也就是他的值和那些问题的本质是相同的,那么我们可以通过求解卡特兰数,简介求解原问题本身。本身也是比较模板的一类问题
下面列出主要的应用场景。
1.合法路径问题,在一个网格中,从(0,0)走到(n,n)的合法方案总数。
2.你现在有n个0和n个1,问有多少个长度为2n的序列,使得序列的任意一个前缀中1的个数都大于等于0的个数,问有多少合法序列
3.你有n个左括号,n个右括号,问有多少个长度为2n的括号序列使得所有的括号都是合法的
4.有一个栈,我们有2n次操作,n次进栈,n次出栈,问有多少中合法的进出栈序列
5.一个长度为n的排列a,只要满足i<j<k且aj<ak<ai就称这个排列为312排列,求n的全排列中不是312排列的排列个数(他的本质就是1,2,。。。依次进栈,312数列就代表不可法的进出站序列)
6.在一个圆周上分布着 2n个点,两两配对,并在这两个点之间连一条弦,要求所得的2n条弦彼此不相交的配对方案数
7.有n个点,问用这n个点最终能构成多少二叉树
8.一个凸的n边形,用直线连接他的两个顶点使之分成多个三角形,每条直线不能相交,问一共有多少种划分方案
本质上这些问题的数学意义一般都和卡特兰数量的某种表达方式类似,所以才相等,实际问题中,我们也可以尝试思考,观察问题和卡特兰数列意义上的关系,或者思考新问题和上述经典模型是否相似。
实际问题中,我们求解卡特兰数的方法一般是直接组合数求解 f n = C 2 n n − C 2 n n − 1 f_n=C_{2n}^{n}−C_{2n}^{n-1} fn=C2nn−C2nn−1
默慈金数
这里先给出百度百科中的定义
默慈金数是在数学中,一个给定的数n的默慈金数是“在一个圆上的n个点间,画出彼此不相交的弦的全部方法的总数”。
他也是一个数列(OEIS中的数列A001006)表达了某种数学意义。
关于他的递推公式可以看这篇论文详细了解,Motzkin Number(默慈金数) - 豆丁网 (docin.com)
Motzkin Number – from Wolfram MathWorld
这里直接给出他的递推形式 f n = ( 2 n + 1 ) f n − 1 + ( 3 n − 3 ) f n − 2 n + 2 f_n=\frac{(2n+1)f_{n-1}+(3n-3)f_{n-2}}{n+2} fn=n+2(2n+1)fn−1+(3n−3)fn−2
他还和卡特兰数有一定联系 f n = ∑ i = 0 ⌊ n 2 ⌋ C n 2 i C a t ( i ) f_n=\sum_{i=0}^{\lfloor{\frac{n}{2}}\rfloor}C_{n}^{2i}Cat(i) fn=i=0∑⌊2n⌋Cn2iCat(i)
从 (0,0) 到 (N,0),你每次可以向右上一格/向右下一格/向正右一格,且不能低于y 轴的合法方案数就是默慈金数的对应值。
本质上,上升x次就会下降x次,其他步就是向右走,所以问题本质还是从n步中选2*x步上下。剩下的部分就相当于卡特兰数的场景2,也就是这个数的定义。
除了这些直接本质相同的问题,还有一些问题会间接的用到他。
比如有一个 1∗n的矩阵,固定第一个数为1,其他填正整数, 且相邻数的差不能超过1,求方案数。
不难发现其实答案的递推数列就是 f n = f n − 1 ∗ 3 − g n − 2 f_n=f_{n-1}*3-g_{n-2} fn=fn−1∗3−gn−2
这里的g就是默慈金数,其实意义就是表示从 (0,0)走到 (i,0)可以向上,向下向右走一格,但是只能在第一象限的方案数。
然后问题本身就可以抽象为每一步可以有3个选择,在减去所有的非法方案即可,非法的方案其实就是前i-1步最后刚好落到1的方案,这样我们就不能继续往下走下一步。
这类问题的本质,还是要从意义考虑,一般不会直接出原始模型。
那罗延数
在组合数学中,那罗延数以及由那罗延数形成的那罗延三角,经常会出现在各种各样的计数问题中。
他其实也和卡特兰数有很紧密的关系。
先给出他的定义和他和卡特兰数的关系表达式。
N ( n , k ) = 1 n C n k C n k − 1 N(n,k)=\frac{1}{n}C_n^kC_n^{k-1} N(n,k)=n1CnkCnk−1
∑ i = 1 n N ( n , i ) = C a t ( n ) \sum_{i=1}^{n}N(n,i)=Cat(n) i=1∑nN(n,i)=Cat(n)
实际上,他就是考虑从(0,0)到(2n,0),只有(1,1)和(-1,-1)两种移动方式,且要求运动轨迹不能低于x轴,峰为k个的合法方案数 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hFBdHfgQ-1665909806412)(C:\Users\12052\Desktop\20210210234619668.jpg)]
所以它也可以从卡特兰数本身出发解决一些类似的问题。
比如,有 n 对括号,共有 k 对左括号和右括号相邻的合法括号序列方案数为 N(n,k)。
实际应用要灵活考虑。
施罗德数
施罗德数还有一个别名,叫超级卡特兰数。
在组合数学中,施罗德数用来描述从(0,0)到(n,n)的格路中,只能使用(1,0)、(0,1)、(1,1)三种移动方式,始终位于对角线下方且不越过对角线的路径数。
不浪费时间介绍他的定义,直接给出他的递推式。
S n = ( 6 n − 3 ) S n − 1 − ( n − 2 ) S n − 2 n + 1 S_n=\frac{(6n-3)S_{n-1}-(n-2)S_{n-2}}{n+1} Sn=n+1(6n−3)Sn−1−(n−2)Sn−2
除了上面给出的例子,还有一些应用,但是其实很多时候,不是特别容易把他抽象出来,变成某个特殊的模型,这种问题更多还是打表解决。或者就是很明显的和他的定义中问题等价的问题。
有一个正n多边形我们要连接一些对角线,把这个多边形分成若干个区域。要求连接的对角线不能相交,每个点可以连出也可以不连出对角线。(即最终不要求所有区域均为三角形)问总方案数。
其他价值比较大的特殊数列
上面是从卡特兰数出发介绍的一些数列,这类数列我们往往更多还是在意他的性质本身,接下来再举一些其他数列,并且他们的相关性比较强,不过实质上也都很类似。虽然本文不展开讲解,不过还是列举出来,感兴趣的同学可以学习更多之后在深入学习。
第一类斯特林数(轮换)
第二类斯特林数(子集)
切赫数(第三类斯特林数)
贝尔数‘。
他们已有一些平凡的递推公式,但是为什么不展开介绍呢?因为他们往往伴随着生成函数一起来考,建议大家学习了生成函数和fft,ntt之后,自行前往学习查找内容。
小tip
很多时候,性质往往也不容易发现,与卡特兰数紧密相关的数列也不止这几项,但是在比赛中,我们完全可以通过打表求出前几项,然后查oeis来得到这些经典数列的递推式,oeis上往往会给出更详细的数列描述,方便辨别是否是你想要的数列。并且这种方法其实比上面讲的加起来还要更实用。这种特殊数列和特殊性质我们往往还是很难考积累全部记全,出题人随便在oeis上找一个数列,选择一个意义然后抽象化另一个题面,就能出一道新题,所以更关键的还是熟练掌握打表技术。