zoukankan      html  css  js  c++  java
  • Catalan数

    一、定义

      Catalan数是组合数学中在经常出现在计数问题中的数列,前几项为:

      (1,2 , 5 ,14,42,132,429,1430,4862,16796,58786,208012,742900,……)

    二、求解公式

      Catalan数有(4)个常用的求解公式

      (①)递归公式1

    [f(n)=sum_{i=1}^{n-1}f(i)*f(n-i-1) ]

      (②)递归公式2

    [f(n)=frac{f(n-1)*(4*n-2)}{n+1} ]

      (③)组合公式1

    [f(n)=frac{C_{2n}^n}{n+1} ]

      (④)组合公式2

    [f(n)=C_{2n}^n-C_{2n}^{n-1} ]

    例1 二叉树计数

      已知一个二叉树有n个节点,求该二叉树有多少种不同的形态。

      定一个点为根,假设左子树有(i)个节点,右子树有((n-i-1))个节点,那么根据乘法原理把他乘起来即可。我们设f(n)为n个节点的不同的二叉树形态个数,那么答案为:

    [f(n)=sum_{i=1}^{n-1}f(i)*f(n-i-1) ]

      这显然就是Catalan数,用组合公式求解即可。

    例2 AB排列问题

      有(n)(A)(n)(B)排在一起,要求从(1)开始的任意位置(B)的个数不能超过(A)的个数,求方案数。

      直接求解满足条件的比较复杂,我们考虑求不符合条件的情况

      令(n)(A)(n)(B)组成的序列(S)不满足条件,那么我们就必定可以找到一个位置(p)满足(S[1...2p+1])中有(p+1)(B),(p)(A)。我们将(S[2p+2...2n])的所有(A)(B)(B)(A),可以得到一个由(n-1)(n+1)个B,(n-1)(A)组成的序列。

      相应的,对于一个由(n-1)(n+1)个B,(n-1)(A)组成的序列,我们必定可以找到一个位置(p)满足(S[1...2p+1])(p+1)(B)(p)(A)。把(S)剩下的转换之后,就得到一个由(n)(A)(n)(B)组成的、存在一个前缀为(B)(A)多的序列。

      因此,这两个序列形成了一个双射,或者它们一一对应。

      所以,根据组合数定义,符合条件的排列的个数为:

    [C_{2n}^n-C_{2n}^{n-1}=frac{C_{2n}^n}{n+1}=Cat_n ]

    例3 乘法加括号

      对于连乘(a_1*a_2*a_3*···*a_n),可以通过加括号改变它的运算顺序,求有多少种运算顺序。

      我们考虑把每一个数和符号都作为二叉树的节点,保证每个数都是二叉树的叶子节点,那么每次就是选择一个(*)使得左边形成一棵二叉树,右边一棵。相当于把求的顺序分为前(pos)个和后(pos)个分开处理,答案也就是二叉树计数。

    例4 欧拉多边形的划分

      给出凸(n)边形的边数,求有多少种分法可以把这个多边形分成互不重叠的(n-2)个三角形。

      我们假定已经选择了一条边,那么一这条边必定会形成一个三角形的一边,而这个三角形也把这个多边形分成了两个多边形,我们设(H_n)(n)边形的分割数,那么容易得到:

    [H_n=H_{n-1}+H_3H_{n-2}+···+H_{n-2}H_3+H_{n-1} ]

      我们再假设确定了一条对角线,把(n)边形分成两个多边形,边数之和为(n+2),而从一个顶点出发的(n-3)条对角线所形成的分割数为:(H_3H_{n-1}+H_4H_{n-2}+···+H_4H_{n-2}+H_3H_{n-1}),由于一条对角线有两个端点,重复计数两次,而每个分割实际重复统计了(n-3)次,所以从所有顶点出发的n边形划分数为:

    [(n-3)H_n=frac{n(H_3H_{n-1}+H_4H_{n-2}+···+H_4H_{n-2}+H_3H_{n-1})}{2} ]

      联立两个式子得到:

    [H_{n+1}=(frac{4n-6}{n})H_n ]

      而这也是(Catalan)数的公式之一,所以可知(H_n=Cat_{n-2})

  • 相关阅读:
    左孩子右兄弟的字典树
    UVA 1401 Remember the Word
    HDOJ 4770 Lights Against Dudely
    UvaLA 3938 "Ray, Pass me the dishes!"
    UVA
    Codeforces 215A A.Sereja and Coat Rack
    Codeforces 215B B.Sereja and Suffixes
    HDU 4788 Hard Disk Drive
    HDU 2095 find your present (2)
    图的连通性问题—学习笔记
  • 原文地址:https://www.cnblogs.com/fangbozhen/p/11761948.html
Copyright © 2011-2022 走看看