关于卡特兰数的小论文

· · 个人记录

关于卡特兰数的小论文

         ----By 555ZhaoHe

1.What is it?

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。由比利时的数学家欧仁•查理•卡塔兰 (1814–1894)命名,其前几项为 : 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....

------360百科

通俗地说,卡特兰数其实就是一种特殊数列,与我们学过的特殊数列都有相似之处,所以完全不用过于害怕。 既然是一种特殊数列,那么也就应该有自己的通项公式,卡特兰数的递推和通项公式如下:

令h(0)=1,h(1)=1,则
h(n)= h(0)h(n-1)+h(1)h(n-2) + ... + h(n-1)h(0) (n>=2)
通项公式为:h(n)=1/(n+1)C(n,2n)=(2n)!/(n+1)!n!(n>=0)
变形公式:h(n)=C(n,2n)-C(n-1,2n)
h(n)= ((4n-2)/(n+1))*h(n-1)

2.How to prove it?

直接的证明过程比较繁琐,推导过程如下图(来自网络):

3. What's the use of it?

卡特兰数最经典的应用大概有以下四种:

1. 出栈次序问题。

2.将多边行划分为三角形问题。

3. 括号化问题。

4.给顶节点组成二叉树的问题。

我们重点研究出栈序列,也是本次主题:

问题原型:一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列? 变形:给出一个n,要求一个长度为2n的01序列,使得序列的任意前缀中1的个数不少于0的个数。 详解: 首先我们知道,卡特兰数与排列组合有关,所以我们可以设f(n)为第n个数的出栈种数。假设最后出栈的元素为k,那么在k入栈之前,比k小的值应该都是出栈状态,也就是总共有f(k-1)种出栈状态。又因为之后都是比k大的值入栈,而且一定是比k先出栈,所以后面的可能性为f(n-k)。此时再根据加法原理,把不同的可能性求和,即f(n)=f(0)f(n-1)+f(1)f(n-2)+...+f(n-1)*f(0)

显然,这就是卡特兰数的递推式,于是我们就从数学角度证明,合法出栈数的答案,就是卡特兰数。只需要边界值f(0)=1,f(1)=1,我们就得到了这道题的答案。

PS:下面附上来自H_Bryan Dalao的另一种设想,可以说是十分的巧妙。(原网址:https://528hby.blog.luogu.org/catalan-shuo-xiao-zong-jie)

出栈次序

对于每一个数来说,必须进栈一次、出栈一次。我们把进栈设为状态‘1’,出栈设为状态‘0’。n个数的所有状态对应n个1和n个0组成的2n位二进制数。由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。 不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个 1和n-m-1个0。如若把后面这2(n-m)-1位上的0和1互换,使之成为n-m个0和n-m-1个1,结果得1个由n+1个0和n-1个1组成的2n位数,即一个不合要求的数对应于一个由n+1个0和n-1个1组成的排列。 反过来,任何一个由n+1个0和n-1个1组成的2n位二进制数,由于0的个数多2个,2n为偶数,故必在某一个奇数位上出现0的累计数超过1的累计数。同样在后面部分0和1互换,使之成为由n个0和n个1组成的2n位数,即n+1个0和n-1个1组成的2n位数必对应一个不符合要求的数。因而不合要求的2n位数与n+1个0,n-1个1组成的排列一一对应。显然,不符合要求的方案数为c(2n,n-1)。由此得出输出序列的总数目=c(2n,n)-c(2n,n-1)。

4.Other maths ways.(Also by 528hby)

这是纯数学方法推导的等价证明,只能跪服...

5.Ending part.

总之,卡特兰数就是这样一种递推数列,在实际应用中,如何抛开种种无关的干扰,能正确地想到运用卡特兰数,才是最重点,也是最难的部分。多加练习,才能成功!