卡特兰数(Catalan)

一、介绍

        卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名。

        历史上,清代数学家明安图(1692年-1763年)在其《割圜密率捷法》最早用到“卡塔兰数”。

        卡特兰序列的前11项为:1, 1, 2, 5,14, 42, 132, 429, 1430, 4862, 16796。

二、性质

2.1 通项公式

        卡塔兰数的一般项公式为  
         C_n = \frac{1}{n+1}{2n \choose n} = \frac{(2n)!}{(n+1)!n!}  

        Cn的另一个表达形式为 :

        C_n = {2n\choose n} - {2n\choose n+1} \quad\mbox{ for }n\ge 1  

        所以,Cn是一个自然数;这一点在先前的通项公式中并不显而易见。这个表达形式也是André对前一公式证明的基础。

2.2 递推关系

        a. C_0 = 1 \quad \mbox{and} \quad C_{n+1}=\sum_{i=0}^{n}C_i\,C_{n-i}\quad\mbox{for }n\ge 0.

        b.C_0 = 1 \quad \mbox{and} \quad C_{n+1}=\frac{2(2n+1)}{n+2}C_n,

        这提供了一个更快速的方法来计算卡塔兰数。卡塔兰数的渐近增长为:

         C_n \sim \frac{4^n}{n^{3/2}\sqrt{\pi}}
        它的含义是当n → ∞时,左式除以右式的商趋向于1。(这可以用n!斯特灵公式来证明。

        c. 所有的奇卡塔兰数Cn都满足所有其他的卡塔兰数都是偶数。

        d. 当n > 4 是,Cn 不是素数。{Cn | (2n)!  推出  Cn若是素数则Cn < 2n  推出  n <4 }。

三、等价问题

        这里列举一些卡塔兰数的等价形式。(边界条件可能不同)

        (1)给定n个元素,依次通过一个栈,求可能的出栈序列的个数。

        解:
        对于每一个数来说,必须进栈一次、出栈一次。我们把进栈设为状态‘1’,出栈设为状态‘0’。n个数的所有状态对应n个1和n个0组成的2n位二进制数。由于任意时刻,出栈的操作数一定不超过入栈的操作数,因此输出序列的总数目为由左而右扫描由n个1和n个0组成的2n位二进制数中,1的累计数不小于0的累计数的方案种数。

        在2n位二进制数中填入n个1的方案数为c(2n,n)。从中减去不符合要求(由左而右扫描,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) = 1/(n+1)*C(2n,n)。

        (2)n个左括号和那个右括号组成的合法匹配的字符串的个数。

        解:这个题目只要将上面证明过程中的1对应左括号,0对应右括号即可。

        (3)n+1个数字连乘,不同的计算顺序个数。

        解:这个就相当于加入了n对合法的括号。

        (4)Cn表示长度2ndyck word的个数。

       (Dyck word是一个有nXnY组成的字串,且所有的部分字串皆满足X的个数大于等于Y的个数。)

        解:(1)中X对应1,Y对应0,即可。

        (5)n个节点的二叉树的可能形态的种类数。

        解:(2)中的每个不同的括号串,一一映射于二叉树的每一种情况。

        这里利用另一个通项公式推导一下:

        设n个节点的二叉树有F(n)个,则分为根的左子树0各节点、右子树n-1个节点,跟的左子树1个节点、右子树n-2个节点,...:

        F(n)= F(0)*F(n-1)+ F(1)*F(n-2)+ ... + F(n-1)*F(0)= Cn。

        (6)n个非叶节点的满二叉树的形态数。(对称后得到的二叉树除非自己本身对称,否则算是不同)

       

        设n个节点的二叉树有F(n)个,则分为根1为根,二为根,...,n为根:

        F(n)= F(0)*F(n-1)+ F(1)*F(n-2)+ ... + F(n-1)*F(0)= Cn。

        (7)对于一个n*n的网格,每次我们能向右或者向上移动一格,那么从左下角到右上角的所有在副对角线下方的路径数。

           卡特兰数(Catalan)_第1张图片

        解:我们将一条水平边记为1,垂直边记为0,那么就组成了一个n个,1和n个0的序列,同(1)。

        (8)凸n+2边形进行三角形分割数。(只连接顶点对形成n个三角形)

          卡特兰数(Catalan)_第2张图片

         解:将节点按顺时针办好1~n,枚举1和其他所有点的连线情况,则:

         F(n)= Σ(F(k)F(n+2-k)){2< k < n};解得 F(n) = Cn-2。

        (9)圆周上2n-2个点的不相交连弦方式。(凸2n-2多边形的顶点也成立)

         解:设Bn为2n-2个点的不相交连弦方式数,则任取一点A有n-1中连弦方式(两侧必须是偶数个点)

         两侧分别是2(k-1)和2(n-k-1)个点,分别为Bk和Bn-k种方式,因此Bn = Cn-1。

        (10)对于集合的不交叉划分的数目。

         对于集合{a,b}和{c,d},假设他们组成了两个区间[a,b]和[c,d],我们假设两个区间不重合,那么以下四种情况当做是不交叉的:a<c<d<b,a<b<c<d,c<a<b<d与c<d<a<b,就是说两个区间可以包含或者相离,那么此时我们称集合{a,b}和{c,d}是不交叉的。对于集合,将里面元素两两分为一子集,共n个,若任意两个子集都是不交叉的,那么我们称此时的这个划分为一个不交叉划分。

        解:我们将每个子集中较小的数用左括号代替,较大的用右括号代替,那么就是(2)。

       (11)n层的阶梯切割为n个矩形的切法数。

        卡特兰数(Catalan)_第3张图片

        解:我们先绘制如下的一张图片,即n为5的时候的阶梯:

         

        我们注意到每个切割出来的矩形都必需包括一块标示为*的小正方形,那么我们此时枚举每个*#标示的两角作为矩形;

        剩下的两个小阶梯就是我们的两个更小的子问题了,于是我们的注意到这里的式子就是Cn的递推公式了

       (12)在一个2*n的格子中填入1到2n使得每个格子内的数值都比其右边和上边的所有数值都小的情况数。

        解:可以转化成括号匹配问题。

       (13)2n个不同实数分成两组A = {a1,a2...,an},B= {b1,b2...,bn},使得对应的数字均有ai<bi的拆分数。

        解:和上面问题等价。

       (14)2n-2张选票,投给甲乙,甲任意时刻得票多于乙的情况数。

        解:即01串的入栈出栈证明。

       (15)不定方程 Σxi = n-1(1到n-1),满足Σ xi ≥ k (1到k)的解的个数。

        解:同上。

四、卡特兰数的应用

1.给乘积X1X,X3......Xn加括号的方法数

将问题转化一下,就是爬坐标,左括号数一定要大于或者等于右括号数

2.排列三个1和三个-1,使得从左到右部分和总是非负的方法数

将问题转化一下,就是加括号的方法数,排1的个数一定要大于或者等于排的-1个数

3.给定四个1和四个0,进行排列组合,使得从左往右读0的个数不超过1的个数

将问题转化为读括号,从左往右读,左括号一定要大于或等于右括号个数。

4.来个看起来复杂点的:将1 2 3 4 5 6排成两行,使得每行3个数,并且每行从左往右读值增加,每一列小数在上

我们可以想象, 1 2 3代表左括号, 4 5 6代表右括号,为了从左往右读值增加,方法会有很多,但加上小数在上大数在下,就相当于左括号数总是大于或者等于右括号数么。假设这里的“左括号”少一个,那么下面一行对应会多一个左括号,而且因为值要求从小到大排列,即每行左括号总是在前,那么在上下对齐时,由于下面左括号要多,所以下行最后一个左括号肯定对齐着上行的右括号,是不符合要求的,但上面行的左括号要多这是没问题的。

5【阿里巴巴笔试题】:说16个人按顺序去买烧饼,其中8个人每人身上只有一张5块钱,另外8个人每人身上只有一张10块钱。烧饼5块一个,开始时烧饼店老板身上没有钱。16个顾客互相不通气,每人只买一个。问这16个人共有多少种排列方法能避免找不开钱的情况出现。

将问题转化为:带5块钱的排前面的个数总是要大于带10块钱的人的个数,即C(16,8)-C(16,7)

6.【腾讯笔试题】在图书馆一共6个人在排队,3个还《面试宝典》一书,3个在借《面试宝典》一书,图书馆此时没有了面试宝典了,求他们排队的总数?

将问题转化为:还书的人总是要大于或等于借书的人,即C(6,3)-C(6,2)

7.出栈次序问题

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

将问题转化为:入栈的数的个数总是要大于或者等于出栈数的个数。C(2n,n)-C(2n,n-1)

8【阿里巴巴笔试题】12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

C(12,6)-C(12,5)


卡特兰数参考:http://mathworld.wolfram.com/CatalanNumber.html

你可能感兴趣的:(卡特兰数(Catalan))