Catalan(卡特兰数)

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)遇到再补充

六、杂谈

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

数学 文章被收录于专栏

记载数学

全部评论

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
06-23 11:43
门头沟学院 Java
allin校招的烤冷...:我靠,今天中午我也是这个hr隔一个星期发消息给我。问的问题还是一模一样的😅
点赞 评论 收藏
分享
就在我现在公司的隔壁每天经过都唏嘘不已(就是羡慕)什么时候可以到这里上班啊
柯基在debug:从大学毕业投简历到现在了,应届的时候我都面到终面了,现在工作四年了连简历初筛都过不了了
投递莉莉丝游戏等公司8个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务