Catalan数

今天看刘汝佳的白书《算法竞赛入门经典 训练指南》中写到,所以在网上学习了一下。

简介  

卡特兰数(Catalan),又称卡塔兰数,事组合数学中常出现在各种计数问题中的一个数列。以比利时数学家欧仁 查理 卡塔兰命名。

其前几项为1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190....

 

性质

递推公式1:an = a0 * an-1 + a1 * an-2 + …....... + a(n-1) * a0 (a0 = 1)

递推公式2:an = a(n-1) * (4*n-2) / (n+1)

通项公式:an = C(2*n, n) / (n+1) 或者 an = C(2*n, n) - C(2*n, n+1)     (其中C为组合数)

所有奇卡特兰数an都满足n = 2 ^ k - 1,其他卡特兰数都是偶数。


公式证明

用递推公式1证通项公式。

法1:本人太笨,询问清华大学数院的WY大神得到以下证法:

构造母函数f(x) = a0 + a1*x + a2*x^2......

则递推式的左边事f(x)的n次项系数,递推式的右边是f(x)^2的n-1次项系数

所以f(x)和x * f(x)的各次数 >= 1的各项系数相同

再注意到常数项a0 = 1,有f(x) = x*f(x)^2 + 1,得到f(x) = (1 + sqrt(1-4*x)) / (2*x)

而sqrt(1 - 4*x)泰勒展开式的n+1次项系数为2^(n+1) * (2*n - 1)!! / (n+1)!,

那么f(x)的n次项系数就是2 ^ n * (2*n-1)!! / (n + 1)!,即C(n, 2*n) / (n + 1)

得证。


法2:见下面的应用3题,法一法二结合恰好得证。


应用

1、对于算式a1 * a2 * a3 *...* an,向其中添加括号,有多少中添加方案。

     答案:a(n-1)种


2、对于一个凸n边形,用对角线将其划分为若干个三角形,有多少种划分方案。

     答案:an种


3、一个无穷大的栈,按顺序向其中添加1, 2, 3, 4...n,问有多少种不同的出栈顺序。(比如可以1进栈,2进栈,2出栈,3进栈,3出栈,1出栈)

   这个问题即相当于下面问题——求满足下列条件的数列一共有多少个:条件一,由n个1和n个0组成的数列;条件二,对该数列从左向右扫描,任何时候扫到1的个数不少于扫到0的个数。

     法一:记所求为an。然后,用k记录第一个1的个数和0的个数相等的位置处1的个数,则对1 <= k <= n,an += a(k-1) * a(n-k)。即Catalan数的递推公式1。

     法二:所有由n个1和n个0组成的数列一共C(n, 2*n)种,从中删去不符合题意的。对所有不符合要求的数列,必然在某一奇数位2m+1位上首先出现 m+1 个 0 和 m 个 1( 0 比 1 多)。在该点之后有 n-m 个 1 和 n-m-1 个 0,把这些0和1互换,则整个数列成为一个由 n+1 个0和 n-1 个1组成的数列。用类似的方法可以证明,n+1 个 0 和 n-1 个 1 组成的数列也可以转化成 n 个 1 和 n 个 0 组成的数列,他们一一对应。故,不符条件的数列一共有C (n+1, 2*n)个。

     故所求为C (n, 2*n) - C (n+1, 2*n)。即Catalan数的通项公式。


4、有 n 个 1 和 m 个 -1排成一个数列,满足对所有0<=k<=n+m的前k个数的部分和Sk > 0的排列数。

     提示:问题等价为在一个格点阵列中,从(0,0)点走到(n,m)点且不经过对角线x==y的方法数(x > y)。


5、有 n 个 1 和 m 个 -1排成一个数列,满足对所有0<=k<=n+m的前k个数的部分和Sk >= 0的排列数。

     提示:类似上题。

4,5确实为很好的两道题,只是过程在百度百科已经叙述得比较不错了,我就不再赘述。

参考资料

百度百科http://baike.baidu.com/view/2499752.htm#refIndex_2_2499752

维基百科http://zh.wikipedia.org/wiki/%E5%8D%A1%E5%A1%94%E5%85%B0%E6%95%B0

http://www.cppblog.com/abilitytao/archive/2010/04/12/112371.html    

题目:

1、UVALive 5028/HDU 3723 Delta Wave

题解:http://www.cnblogs.com/plumrain/p/counting.html

------------------------------------------------------------------
现在的你,在干什么呢?
你是不是还记得,你说你想成为岩哥那样的人。
原文地址:https://www.cnblogs.com/plumrain/p/catalan.html