卡特兰数

卡特兰数的引入与n边形分成三角形的个数有关:

我们令f[n]表示n边形可以分成的三角形的个数,特殊的,令f[2]=1

  1. 我们考虑以顶点1顶点的一个三角形,假设用的是n边形的k-k+1边,那么这种情况的方案数就是 f [ k ] ∗ f [ n − k + 1 ] f[k]*f[n-k+1] f[k]f[nk+1],这个边可以变化,从1-2到n-1-n,所以 f [ n ] = f [ 2 ] ∗ f [ n − 1 ] + f [ 3 ] ∗ f [ n − 2 ] + . . . + f [ n − 1 ] ∗ f [ 2 ] f[n]=f[2] *f[n-1]+f[3] *f[n-2]+...+f[n-1]*f[2] f[n]=f[2]f[n1]+f[3]f[n2]+...+f[n1]f[2]
  2. 我们考虑从某个顶点发出的对角线,将这个n边形分成两部分,考虑这种情况下共有 f [ 3 ] ∗ f [ n − 1 ] + f [ 4 ] ∗ f [ n − 1 ] + . . . + f [ n − 1 ] ∗ f [ 3 ] f[3]*f[n-1]+f[4]*f[n-1]+...+f[n-1]*f[3] f[3]f[n1]+f[4]f[n1]+...+f[n1]f[3]种情况,共有n个顶点,所以还要乘上n,可是这样显然重复的很多的情况。考虑每种情况,共有n-3条对角线,每个对角线的两个顶点都会计算一次这样的情况,所以最后还要除以2*(n-3)

这样我们就得到了两个递推式:
1. f [ n ] = f [ 2 ] ∗ f [ n − 1 ] + f [ 3 ] ∗ f [ n − 2 ] + . . . + f [ n − 1 ] ∗ f [ 2 ] 1.f[n]=f[2]*f[n-1]+f[3]*f[n-2]+...+f[n-1]*f[2] 1.f[n]=f[2]f[n1]+f[3]f[n2]+...+f[n1]f[2]
2. f [ n ] = n ∗ ( f [ 3 ] ∗ f [ n − 1 ] + f [ 4 ] ∗ f [ n − 2 ] + . . . + f [ n − 1 ] ∗ f [ 3 ] ) / ( 2 ∗ n − 6 ) 2.f[n]=n*(f[3]*f[n-1]+f[4]*f[n-2]+...+f[n-1]*f[3])/(2*n-6) 2.f[n]=nf[3]f[n1]+f[4]f[n2]+...+f[n1]f[3]/(2n6)
我们将一式往前递推一项,再结合二式,就可以得到递推式:
f [ n + 1 ] = f [ 2 ] ∗ f [ n ] + f [ 3 ] ∗ f [ n − 1 ] + . . . + f [ n ] ∗ f [ 2 ] = 2 ∗ f [ 2 ] ∗ f [ n ] + ( 2 ∗ n − 6 ) / n ∗ f [ n ] = ( 4 ∗ n − 6 ) ∗ f [ n ] f[n+1]=f[2]*f[n]+f[3]*f[n-1]+...+f[n]*f[2]=2*f[2]*f[n]+(2*n-6)/n*f[n]=(4*n-6)*f[n] f[n+1]=f[2]f[n]+f[3]f[n1]+...+f[n]f[2]=2f[2]f[n]+(2n6)/nf[n]=(4n6)f[n]
这样我们就能递推的求解卡特兰数。

将这个数字的应用推广,这类数字的根本是第一个递推式,我们不妨从0开始算起(忽略卡特兰数的几何意义,仅仅当作一个特殊的递推公式)

f [ n ] = f [ 0 ] ∗ f [ n − 1 ] + f [ 1 ] ∗ f [ n − 2 ] + . . . + f [ n − 1 ] ∗ f [ 0 ] , 其 中 f [ 0 ] = 1 f[n]=f[0]*f[n-1]+f[1]*f[n-2]+...+f[n-1]*f[0],其中f[0]=1 f[n]=f[0]f[n1]+f[1]f[n2]+...+f[n1]f[0]f[0]=1

即所有满足这种关系的数字都是卡特兰数,在这种定义下我们同样可以求得递推式

  1. f [ n ] = ( 4 ∗ n − 2 ) / ( n + 1 ) ∗ f [ n − 1 ] f[n]=(4*n-2)/(n+1)*f[n-1] f[n]=(4n2)/(n+1)f[n1](结合上面的推法应该可以推出来但是我还没有尝试)
  2. f [ n ] = C ( n , 2 n ) / n + 1 = C ( n , 2 n ) − C ( n − 1 , 2 n ) f[n]=C(n,2n)/n+1=C(n,2n)-C(n-1,2n) f[n]=C(n,2n)/n+1=C(n,2n)C(n1,2n)

应用:只要符合上面那种递推式的都是卡特兰数

  • 已知一颗二叉树有n个结点,问:该二叉树能组成多少种不同的形态
    问题的关键是找到递推式,我们要想办法将问题转换成子问题,对于这个问题,我们就可以思考左子树和右子树(不同的问题有不同的结构,我们要分析问题的模式,找到将问题分解的方法。)我们用f[n]表示n个节点的数可以形成多少子树,不难想到f[n]满足上面的递推式,是卡特兰数
  • 有n个A和n个B排成一排,从第1个位置开始到任何位置,B的个数不能超过A的个数,问这样的排列有多少种
    分析一下问题:关键是B的个数不能超过A的个数,所以一旦前2*k个位置中A和B相等,对后面就不会产生影响,相当与后面2 *n-2 *k个位置是独立的,可以重新进行思考。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值