卡特兰数详解

卡特兰数

一、基础公式

定义式

  • f[n]=i=0n1f[i]f[n1i]f[n]=\sum\limits_{i=0}^{n-1}f[i]*f[n-1-i]

组合数公式 (用生成函数推导定义式)

  • f[n]=C2nnC2nn1f[n]=C_{2n}^n-C_{2n}^{n-1}
  • f[n]=C2nnn+1f[n]=\displaystyle\frac{C_{2n}^n}{n+1}
  • f[n]=4n2n+1f[n1]f[n]=\displaystyle\frac{4n-2}{n+1}*f[n-1]

卡特兰数列

  • f[0]=1,f[1]=1,f[2]=2,f[3]=5...f[0]=1,f[1]=1,f[2]=2,f[3]=5...
  • 11,11,22,55,1414,4242,132132,429429,14301430,48624862,1679616796,5878658786,208012...208012...

二、应用方向

括号匹配问题

  • nn 个左括号,nn 个右括号,对于每一个位置,左括号数大于等于右括号数的方案总数。
  • 等价于 nn11nn1-1,每个位置前缀和大于等于 00 的方案总数。
  • 两种理解方向:
  1. f[n]=i=0n1f[i]f[n1i]f[n]=\sum\limits_{i=0}^{n-1}f[i]*f[n-1-i]。枚举第一次前缀和为 00 的位置,假如第 2x2*x 个点为第一次前缀和为 00 的点,则固定第一个数为 11,第 xx 个数为 1-1,则对答案贡献为 f[x1]f[nx]f[x-1]*f[n-x]
  2. f[n]=C2nnC2nn1f[n]=C_{2n}^n-C_{2n}^{n-1}。总方案数为 C2nnC_{2n}^n,现需求不符合条件的方案数,将问题转化为网格上的折线问题。第 ii 次在 (i,j)(i,j) 处,第 i+1i+1 次在 (i+1,j+1)(i+1,j+1)(i+1,j1)(i+1,j-1) 处,终点为 (2n,0)(2n,0)。不符合条件则说明折线上出现了 (x,1)(x,-1) 这个点,xx 为第一次到达 1-1 的点,我们将 xx 点之后的折线沿 y=1y=-1 对称过来,则终点为 (2n,2)(2n,-2),则一共有 n1n-111n+1n+11-1,即不合法的方案总数为 C2nn1C_{2n}^{n-1},因此 f[n]=C2nnC2nn1f[n]=C_{2n}^n-C_{2n}^{n-1}
    卡特兰数详解

出栈次序问题

  • 一个无穷大的栈,进栈序列为 1,2,3...n1,2,3...n,求有多少个不同的出栈序列。

多边划分为三角形问题

  • 将一个凸多边形区域分成三角形区域的方案数。
  • 在圆上选择 2n2*n 个点,将这些点对连接起来使得所得到的 nn 条线段不想交的方案数。

二叉树计数问题

  • 给定 nn 个节点,能构成多少种形状不同的二叉树。
  • 先取一个点作为顶点,然后左边依次可以取 0n10~n-1 个点,右边则可以取 n10n-1~0 个点,相乘再累加即可得到答案。