卡特兰数(Catalan Number) 学习笔记
一、三个简单的问题
1.给定一串长为2n的01序列,其中0和1的数量相等,满足任意前缀中0的个数不少于1的个数,求序列的个数
2.给出一串长为n的序列,按顺序将他们进栈,随意出栈,求最后进出栈的方案
3.给定一个n个节点的二叉树,求二叉树有多少种(这里定义不同指树的形态不同)
这三个问题都有关catalan数
事实上关于Catalan的性质有关问题很多,这里只是比较针对的列出了几种。
二、求解问题1
稍微想一想及可以知道,问题1,2同构,问题3却好像不一样。
我们以问题1为例,推出卡特兰数的计算式。
很简单的容斥原理,我们先求出所有的序列,然后减去不合法的序列即是答案
所有序列个数直接根据组合数的定义为\(C_{2n}^n\)
关于不合法的序列,我们先介绍结论,然后进行证明
满足存在一个前缀使得1的个数大于0的个数的 n个0与n个1构成的01序列与n+1个0与n-1个1构成的01序列 构成一个双射,即11对应关系
很显然,后者的数量为\(C_{2n}^{n-1}\)
证明:
对前者,很显然可以找到一个位置为\(2p+1\)的前缀,使得其中有\(p+1\)个\(1\)和\(p\)个\(0\),好的我们把它取反,即得到了后者
对后者,同样我们可以找到一个位置为\(2p+1\)的前缀,使得其中有\(p\)个\(1\)和\(p+1\)个\(0\)(\(0\)比\(1\)多我们一定可以找到),然后取反,得到前者
综上所述,我们得到了卡特兰数的计算公式1
\[Cat_n=C_{2n}^n-C_{2n}^{n-1}\]
化简搞一搞
\[Cat_n=\frac{C_{2n}^n}{n+1}\]
可以继续推出递推式
\[Cat_n=\frac{2(2n-1)}{n+1}Cat_{n-1}\]
对递推式\(Cat_0=1\)
事实上,计算时求有组合数的那个用的比较多。
三、求解问题3
很抱歉有一步的证明不能给出,一是网上没找到,二是听说比较难
对于问题3,我们发现它本身介绍一个可以递归求解的子问题,设方案数为\(h(n)\)。
我们随便选取一点作为根(点都是相同的),则分别讨论左右子树的大小即可
显然有
\[h(n)=\sum_{i=0}^n h(i) \times h(n-1-i)\]
\[h(0)=h(1)=1\]
经过证明,\(h(n)=Cat_n\)
于是对于递推式是这样的题目,我们也可以使用卡特兰数解决。
可能会更新一些题目...
参考资料:算法竞赛进阶指南,网上的博客
卡特兰数(Catalan Number) 学习笔记的更多相关文章
- 浅谈卡特兰数(Catalan number)的原理和相关应用
一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[ ...
- 卡特兰数 catalan number
作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...
- 卡特兰数(Catalan Number) 算法、数论 组合~
Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡特兰数的前几个数 前20项为( ...
- 【知识总结】卡特兰数 (Catalan Number) 公式的推导
卡特兰数的英文维基讲得非常全面,强烈建议阅读! Catalan number - Wikipedia (本文中图片也来源于这个页面) 由于本人太菜,这里只选取其中两个公式进行总结. (似乎就是这两个比 ...
- [LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析
本文原题: LeetCode. 给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数. 什么是二叉搜寻树? 二叉查找树(Binary Search Tree),或者是一棵 ...
- 卡特兰数 Catalan数 ( ACM 数论 组合 )
卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1) 编辑 收藏 引用 所属分类: ACM ( 数论 ...
- 卡特兰数 Catalan 笔记
一.公式 卡特兰数一般公式 令h(0)=1,h(1)=1,catalan数满足递推式.h(n) = h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>= ...
- 【2020.12.01提高组模拟】卡特兰数(catalan)
题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...
- 卡特兰数(Catalan)及其应用
卡特兰数 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数前几项 ...
随机推荐
- centos7下安装mysql8.0.12及设置权限
一.mysql版本介绍 mysql的官网为:https://www.mysql.com/ 在官网上可以看到多个版本,主要版本如下, 1.MySQL Community Server 社区版本,开源免费 ...
- ReadyAPI教程和示例(一)
声明:如果你想转载,请标明本篇博客的链接,请多多尊重原创,谢谢! 本篇使用的 ReadyAPI版本是2.5.0 通过下图你可以快速浏览一下主要的ReadyAPI中SoapUI功能: 一.创建一个功 ...
- Linux命令应用大词典-第25章 备份与还原
25.1 mkisofs:创建ISO9660/Joliet/hfs文件系统
- Python递归算法入门
递归是一种算法,它在编程里面有着广泛的应用: 1. 递归必须满足哪两个基本条件? 一.函数调用自身 二.设置了正确的返回条件 2. 思考一下,按照递归的特性,在编程中有没有不得不使用递归的情况? 答: ...
- 参数为json格式的接口
1.参数为json格式,需要添加一个header信息web_add_header("Content-type", "application/json"); 2. ...
- django 连接mysql报错
原因: 问题1. 即从mysql5.7版本之后,默认采用了caching_sha2_password验证方式. 问题2. 然后在执行 python manage.py makemigrations依 ...
- cookie,localstorge,sessionstorge三者总结
相同点:都是客户端存储东西的: 不同: 1大小,cookie最小;locastorge最大 2 cookie设置好会在header头里面自动带的:但是ls和ss不会:ls同个浏览下不同网页(非跨域)都 ...
- Oil Deposits(DFS连通图)
Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep ...
- 将MathType公式转换为LaTex格式
LaTex编辑公式不够直观,常常会因为结构复杂导致数据或者符号出错,使用MathType编辑公式后再直接转换成LaTex代码可以避免这个问题. 一.首先在MathType中编辑公式 二.然后点击参数— ...
- pythoh使用 xpath去除空格空格
html_str = """ <!DOCTYPE html> <html lang="en"> <head> &l ...