卡特兰数[catalan数]`

定义:

卡特兰数又叫卡塔兰数,是组合数学中一类常用的数列。前几项为:1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...是组合数学中常见的一类数。


公式:

递推式:设C(0) = 0, C(1) = 1.C(n) = C(0) * C(n - 1) + C(1) * C(n - 2) + ....C(n - 2) * C(1) + C(n - 1) * C(0).(n >= 2)

              化简得 C(n) = c(2 * n, n) / (n + 1).

另类递推式:C(n) = C(n - 1) * (4 * n - 2) / (n + 1).

              化简得 C(n) = c(2 * n, n) - c(2 * n, n + 1).

应用:

卡特兰数有很多的经典应用。不一一介绍,后序会提到。

1.买票问题:说n个拿着50元的人和n个拿着100元的人,买价值为50元的票,并且售票厅最初始的时候没有任何的零钱可找。问有多少种排队的方式使得买票没有中断。买票中断意味着当前售票厅没有零钱并且当前买票人的手里是100元。 这是卡特兰数其中经典的应用之一。

分析一:

其实,这个问题可以转化为括号匹配问题来解决。。

我们可以把拿着50元的看成左括号' ( ' ,对应着把拿着100元的看成右括号 ' ) '。这样我们的问题就转化为求合法的括号匹配的排列数。

我们知道合法的括号匹配排列,首个肯定为左括号,否者该序列肯定不是合的。

如 (######)@@@@@@

上述符号,假设第0个和第 k是匹配的,如果该序列是合法的,那么 1 - (k  - 1) 个字符肯定是合法的括号匹配排列。同理,如果该排列的长度为L,那么(k + 1) - L也应该的一个合法的括号匹配排列。    由此我们可以知道k必定是一奇数。。

我们设F(2n) 为长度为2n的排列的合法数。。

那么上诉的字符串的合法数就为F(2n) = F(k - 2) * F(2n - k)。

看下图:


分析二:

我们假设拿50元的人为1,拿100元的人为0。那么2n个人就是n个1和n个0的数字序列。如果一个序列中的任意前k( 1 <= k <=n)项中1的个数不少于0的个数,那么我们就称为这个序列为合法序列,否则的话为非法数列。明显的合法的数列正好和合法的排队序列对应。。。

Sigma序列:由n - 1个1和n + 1个0组成的序列。。   而一个Sigma序列正好为一个非法序列对应。并且是一一对应。。

我们知道所有的排列序列为C(2n, n)。(为n个1选择n位置,然后剩余位置为0的位置)。

我们也是可以算出Sigma序列的种类数的,C(2n, n -1)。(同样,要为1找n-1个位置,然后剩余位置为0的位置)。

重要的是就是要理解为什么Sigma数列和非法数列一一对应。。

对于任意的Sigma数列,我们知道一定存在一个k,前k个数的,1的个数-0的个数=1。那么k后面的2n - k个数,1的个数-0的个数=1。如果将后面的2n - k个数对换,也就是说,后面的0变1,1变0。那么整个序列正好为n个1和n个0。也就成功的将一个Sigma数列对应到唯一的一个非法序列。。


那么最后就得到合法是序列为C(2 * n, n) - C(2 * n , n -1) = C(2 * n , n) / (n + 1)。也就是是第2*n个卡特兰数。


卡特兰数还有很多是应用。。

2.矩阵连乘问题:P =  a1 * a2 * a3 *.....* an。依据乘法结合律,不改变矩阵的互相顺序,只用括号表示成对的乘积,问有几种括号化的方案。C(n - 1)。

3.将多边形划分为三角形问题。求一凸变形区域划分成三角形区域的方法数。n条边种类数为C(n - 2),n个顶点种类数为C(n - 3)。

4.圆上的2n个点,将这点成对的连接起来,且所得的n条边不相交,求可行的方法数。C(n)。

5.出栈顺序问题,进栈顺序为1,2,3,4,5.....n,问出栈顺序的种类。。C(n)。

6.



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值