卡特兰数及其应用_二进制数

 卡特兰数及其应用_数论_02

 

 卡特兰数及其应用_二进制数_03

 

 

出栈次序

一个栈(无穷大)的​​进栈​​​序列为1,2,3,…,n,有多少个不同的​​出栈​​序列?  常规分析

首先,我们设 f(n)=序列个数为n的出栈序列种数。(我们假定,最后出栈的元素为k,显然,k取不同值时的情况是相互独立的,也就是求出每种k最后出栈的情况数后可用加法原则,由于k最后出栈,因此,在k入栈之前,比k小的值均出栈,此处情况有f(k-1)种,而之后比k大的值入栈,且都在k之前出栈,因此有f(n-k)种方式,由于比k小和比k大的值入栈出栈情况是相互独立的,此处可用乘法原则,f(n-k)*f(k-1)种,求和便是Catalan递归式。)

首次出空之前第一个出栈的序数k将1~n的序列分成两个序列,其中一个是1~k-1,序列个数为k-1,另外一个是k+1~n,序列个数是n-k。 此时,我们若把k视为确定一个序数,那么根据​​乘法原理​​​,f(n)的问题就等价于——序列个数为k-1的出栈序列种数乘以序列个数为n - k的出栈序列种数,即选择k这个序数的 f(n) =f(k-1) × f(n-k)。而k可以选1到n,所以再根据​​加法原理​​,将k取不同值的序列种数相加,得到的总序列种数为:f(n) = f(0)f(n-1) + f(1)f(n-2) + …… + f(n-1)f(0)。

看到此处,再看看卡特兰数的递推式,答案不言而喻,即为 f(n) = h(n) = C(2n,n) / (n+1) = C(2n,n) - C(2n,n-1)(n=0,1,2 ……)。 最后,令f(0)=1,f(1)=1。  

非常规分析

对于每一个数来说,必须进栈一次、出栈一次。我们把​​进栈​​​设为状态‘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)=h(n)。  

类似问题 n对括号正确匹配数目

给定n对括号,求括号正确配对的字符串数,例如: 0对括号:[空序列] 1种可能 1对括号:() 1种可能 2对括号:()() (()) 2种可能 3对括号:((())) ()(()) ()()() (())() (()()) 5种可能 将上例的1换成左括号,0换成右括号,则所有包含n对括号的合法运算式的个数也是卡特兰数    

买票找零

有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少种方法使得只要有10元的人买票,售票处就有5元的钞票找零(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)    

计算长度为2n的Dyck Words的个数

  h(n) 表示长度2n的dyck word的个数。Dyck词是一个有n个X和n个Y组成的字串,且所有的前缀字串皆满足X的个数大于等于Y的个数。以下为长度为6的dyck words: XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY  

计算n×n格点中单调路径的个数

h(n)表示所有在n×n格点中不越过对角线的单调路径的个数。一个单调路径从格点左下角出发,在格点右上角结束,每一步均为向上或向右。计算这种路径的个数等价于计算Dyck word的个数:X代表“向右”,Y代表“向上”。下图为n = 4的情况:                                                           卡特兰数及其应用_入栈_04

 

 

 

参考文章

​卡特兰数 - 百度百科 ​

​卡塔兰数 - 维基百科​