一、递推式
已知n(n∈N)个元素,约定元素k表示第k个入栈的元素,换句话说,将元素按入栈顺序的先后编号为1~n,称为元素1~n。求可能的出栈顺序的总数Cn。
显然C1=1, C2=2。当n=3时,C3=5,可能的出栈顺序有(用1表示入栈,0表示出栈)
出栈顺序 | 123 | 132 | 213 | 231 | 321 |
---|---|---|---|---|---|
操作方法 | 101010 | 101100 | 110010 | 110100 | 111000 |
如当n=4时,C4=14,可能的出栈顺序有
出栈顺序 | 1234 | 1243 | 1324 | 1342 | 1432 | 2134 | 2143 |
---|---|---|---|---|---|---|---|
操作方法 | 10101010 | 10101100 | 10110010 | 10110100 | 10111000 | 11001010 | 11001100 |
出栈顺序 | 2314 | 2341 | 2431 | 3214 | 3241 | 3421 | 4321 |
操作方法 | 11010010 | 11010100 | 11011000 | 11100010 | 11100100 | 11101000 | 11110000 |
将这14种可能按照元素1的出栈顺序可以分成4组:元素1第1/2/3/4个出栈。
出栈顺序 | 1234 | 1243 | 1324 | 1342 | 1432 | 2134 | 2143 |
---|---|---|---|---|---|---|---|
操作方法 | 10101010 | 10101100 | 10110010 | 10110100 | 10111000 | 11001010 | 11001100 |
出栈顺序 | 2314 | 2341 | 2431 | 3214 | 3241 | 3421 | 4321 |
操作方法 | 11010010 | 11010100 | 11011000 | 11100010 | 11100100 | 11101000 | 11110000 |
不妨按元素1第几个出栈排列。当元素1第1个出栈时,元素234的出栈顺序任意,方案数显然为C3。当元素1第2个出栈时,显然第1个出栈的是元素2,后2个出栈的便为元素34,且只要元素34出栈顺序合法,则4个元素的出栈顺序便一定为合法的,根据分步相乘原则,方案数为C1×C2;当元素1第3个出栈时,显然前2个出栈的是元素23,最后一个出栈的是元素4,方案数为C2×C1;当元素1第4个出栈时,前3个出栈的元素234顺序任意,方案数也为C3。最后,根据分组相加原则,总方案数C4=C3+C1×C2+C2×C1+C3。
推广到Cn,可得Catalan数的递推式:
二、通项公式
求
Cn
的通项公式则是由操作方法的01串入手。首先,显然对于每个合法的01串,在其任意前缀中1的数量≥0的数量。每个元素都会入栈一次、出栈一次,则01串必然有2n个数字,由n个0和n个1组成。在2n个位置中填入n个1(剩下的位置自动填0)的方案数为
Cn2n
。从
Cn2n
中减去不合法的方案数即为所求。同理,对于每个不合法的01串,必然在至少一组前缀中1的数量<0的数量。
对于每个不合法的01串,设m为0的数量>1的数量的最短前缀中1的个数,显然该前缀有m+1个0,2m+1个数位。此后的2(n-m)-1位上有n-m个1,n-m-1个0。如果把这2(n-m)-1位按位取反,变为n-m个0,n-m-1个1,结果得到一个由n+1个0和n-1个1组成的2n位01串。
反过来,任何一个由n+1个0,n-1个1组成的2n位01串,也必然在某一前缀中0的数量>1的数量,同样将后面的数位按位取反,结果得到一个由n个0和n个1组成的2n位01串,且由于两个01串的前缀相同,∴新01串必然在同一前缀中0的数量>1的数量,∴新01串一定是不合法的。
通过上述过程,我们证明了由n个0和n个1组成的2n位不合法01串与由n+1个0和n-1个1组成的2n位01串一一对应,所以不合法的01串共有
Cn+12n
。
三、变式
Catalan数的变式很有趣的一点是推出递推式与通项公式的方法不同,变式也不同。
推出递推式的方法的变式包括
1. Cn表示通过连结顶点而将n + 2边的凸多边形分成三角形的方法个数。
2. Cn表示用n个长方形填充一个有n个台阶的阶梯的方法个数。
3. Cn表示有n个结点组成二叉树的方案数。
4. Cn表示有2n+1个节点组成不同构满二叉树的方案数。
推出通项公式的方法的变式包括
- Cn表示在平面直角坐标系中,只向右、向上走,只在格点处转弯,不穿过直线y=x(可以在直线上),从(0,0)走到(n,n)的方案数。
- 在圆上选择2n个点,将这些点成对连接起来,且所得n条线段不相交,求可行的方法数。
分析:—————— - (2n)个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
- 2n个人排队买票,其中n个人持50元,n个人持100元。每张票50元,且一人只买一张票。初始时售票处没有零钱找零。请问这2n个人一共有多少种排队顺序,不至于使售票处找不开钱?
变式4还有一种变化:n+m个人排队买票,并且满足,票价为50元,其中n个人各手持一张50元钞票,m个人各手持一张100元钞票,除此之外大家身上没有任何其他的钱币,并且初始时候售票窗口没有钱,问有多少种排队的情况数能够让大家都买到票。