Catalan(卡特兰数)证明

一、模型1证明

思路:直接用排列组合,强行证明

  • 假设有n对左右括号,请求出合法的排列有多少个?
    合法是指每一个括号都可以找到与之配对的括号,比如
    n=1时,()是合法的,但是)(为不合法。

1)求总排列数

左括号数量为n ,右括号数量为n ,总排列数
解释1)因为每个(或)都是一样的,所以,我们只需要从2n个位置找出n个位置,放上(,其他的就只有一种情况,那就是全放上)
解释2)我们可以用高中排列组合来解释,我们假设每个(或)都不相同,我们先全排列,也就是。然后,很显然,我们多算了n个(的全排列和n个)的全排列,所以还要在这个基础上除以*
转换,也就是等价于这种解释比较麻烦,非常不建议用
PS:这种解释,我记得在《组合数学》第5版,Richard A.Brualadi书中,叫做多重集合排列。只是高中没有这种说法。

2)求不合法的排列数目

不合法的排列一定是出现了右括号比左括号多一个的前缀。
我们设

 (为1
 )为-1
  • 我们还要引入一种变化方式
1 -1 -1 -1 1 1 -1
  • 我们找到,第一次出现右括号比左括号多的时候,也就是1 -1 -1。变化方法,将1变-1,-1变1
    这样,就会形成:
    总体看来,将得到n+1个1,和n-1个-1组成的排列
  • 易知,每一个非法的排列通过如上的变换方式可以得到n+1个1和n-1个-1所组成的排列。
    并且,
每一个非法排列《通过变换和变换的逆过程可(一一对应)》n+ 1个1和n-1个-1组成的排列

所以显然,所以不合法的排列数
n+1个1和n-1个-1组成的排列数
也就是

3)Catalan数(卡特兰数)

卡特兰数的第1个格式

卡特兰数的第1个格式: $C_{2n}^{n}-C_{2n}^{n+1}=\frac{1}{n+1}C_{2n}^{n}$

二、模型2证明

思路:借助“状态”,借助图形,观察规律,难道会有一些“动态规划”的意味?当然不是“动态规划”

  • 游乐园的门票50元一张,每人限购一张.现在有10个小朋友排队购票,其中5个小朋友带了1张50元钞票,另外5个小朋友带了1张100元钞票.售票员没有准备零钱.问有多少种排队方法,使售票员总能找的开零钱?

定义状态(a, b),表示前n个小朋友中有a个小朋友带了50元,有b个小朋友带了100元,其中n=a+b(a≥b)
显然:
1个小朋友的状态只有1种可能性: (1, 0);
2个小朋友的状态有2种可能性: (2, 0)或(1,1);
3个小朋友的状态有2种可能性: (3,0)或(2,1)
etc
到此,有人突发奇想,要是这么写比较麻烦,很不直观,所以想要将这个可视化。就想到了,将a和b映射到直角坐标系中去,也就有了下面这样的图形。
写博客到这,发现,要画这些图还需要弄“几何画板”,考完试再优化

图片说明

很显然,我们要求的就是从点(0,0)到(5,5)不超出直线方程y=x的这样的排列的个数。
我们将,到点(a,b)的方法数是如下图。

图片说明

这样问题就转换为“格路模型”,由《组合数学》第5版,Richard A.Brualadi中证明,显然是

卡特兰数的第1个格式:

启发思路,还有https://www.bilibili.com/video/BV1tE411R7mw?from=search&seid=15340802308492660704这个视频的人的证明方式,用了类似于光的“反射”。

三、模型3证明

思路:计数原理-分类

  • 求n个无差别的节点构成的二叉树有多少种不同的结构?
    假设n个无差别的节点构成不同的结构数为f(n)
    f(0)表示空树,所以规定种数为1种。
    分类:
  • 第1个节点为头时,结构数为f(0)*f(n-1)//左子树是空树,右子树是n-1个点组成的子树
  • 第2个节点为头时,结构数为f(1)*f(n-2)//左子树是1个点组成的子树,右子树是n-1个点组成的子树
  • 以3节点为头时,结构数为f(2)*f(n-3)
  • 以4节点为头时,结构数为f(3)*f(n-4)
  • 以5节点为头时,结构数为f(4)*f(n-5)
    etc.

卡特兰数的第2个格式

f(0)=1,f(1)=1,f(2)=2,f(3)=5时

卡特兰数的第2个格式: $f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+... f(n-1)*f(0)=\frac{1}{n+1}C_{2n}^{n}$
  • 证明:




    (1)
  • 构造生成函数


    (2)
  • So

    由(1)知
    (3)
    由(2)和(3)知
    至此,应为极限状态,方程才成立
    但Catalan需要离散化
  • 离散化
    Because
    So
    So

    Because
    (2)式易知
    So

  • 我们将它于x0=0处进行泰勒展开
    可以容易知道
系数 展开项
$$
$$
$$
$$
省略 省略
$$
  • 将展开式代入知道表达式,比对系数知道 $f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+... f(n-1)*f(0)=\frac{1}{n+1}C_{2n}^{n}$ 证毕

这样,弄出了递推公式,还可以写代码

#include <stdio.h>
int main()
{
    int f[100]={0};
    int i,j;
    f[0]=1;
    f[1]=1;
    f[2]=2;
    f[3]=5;
    for(i=4; i<=100; i++) 
    {
        for(j=0; j<=i-1; j++)
            f[i]+=f[j]*f[i-1-j];
    }
    printf("%d",f[100]);
    return 0;
}

四、卡特兰数的第3个格式

用通项公式相除,易导出

卡特兰数的第3个格式:

五、其他应用

1)在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?
2)圆桌周围有2n个人,他们两两握手,但没有交叉的方案数为f(n)
3)求一个凸多边形区域划分成三角形区域的方法数?
4)10个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问有多少种排列方式?
5)出栈次序问题
6)遇到再补充

六、杂谈

此外,卡特兰数和斐波那契数也有一定关系,具体见论文
“卡特兰数的推广与斐氏数的一个关系”