卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。其计算公式是
由计算公式很容易导出其递推公式为 C0=1,Cn=2(2n+1)n+2Cn−1 C 0 = 1 , C n = 2 ( 2 n + 1 ) n + 2 C n − 1
卡特兰数列的前四项是1,1,2,5,…
应用:
1.
Cn
C
n
表示长度2n的dyck word的个数。Dyck word是一个有n个X和n个Y组成的字串,且所有的前缀字串皆满足X的个数大于等于Y的个数。以下为长度为6的dyck words:
XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY
2. 将上例的X换成左括号,Y换成右括号,Cn表示所有包含n组括号的合法运算式的个数:
((())) ()(()) ()()() (())() (()())
3.
Cn
C
n
表示所有在n × n格点中不越过对角线的单调路径的个数。一个单调路径从格点左下角出发,在格点右上角结束,每一步均为向上或向右。计算这种路径的个数等价于计算Dyck word的个数:X代表“向右”,Y代表“向上”。
4. 电影院买票找零问题:有2n个人排队进电影院,票价是50美分。在这2n个人当中,其中n个人只有50美分,另外n个人有1美元(纸票子)。愚蠢的电影院开始卖票时1分钱也没有。问:有多少种排队方法使得每当一个拥有1美元买票时,电影院都有50美分找钱
注:1美元=100美分,拥有1美元的人,拥有的是纸币,没法破成2个50美分
证明:
令1表示进栈,0表示出栈,则可转化为求一个2n位、含n个1、n个0的二进制数,满足从左往右扫描到任意一位时,经过的0数不多于1数。显然含n个1、n个0的2n位二进制数共有
Cn2n
C
2
n
n
个,下面考虑不满足要求的数目。
考虑一个含n个1、n个0的2n位二进制数,扫描到第2m+1位上时有m+1个0和m个1(容易证明一定存在这样的情况),则后面的0-1排列中必有n-m个1和n-m-1个0。为了便于求解不满足要求的情况(即扫描到某一位时经过的0数多于1数)数,将2m+2及其以后的部分0变成1、1变成0(一一映射,情况数是相等的),则对应一个n+1个0和n-1个1的二进制数。从而
参考资料:
1. 维基百科卡特兰数