一、三个简单的问题

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) 学习笔记的更多相关文章

  1. 浅谈卡特兰数(Catalan number)的原理和相关应用

    一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[ ...

  2. 卡特兰数 catalan number

    作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...

  3. 卡特兰数(Catalan Number) 算法、数论 组合~

    Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡特兰数的前几个数 前20项为( ...

  4. 【知识总结】卡特兰数 (Catalan Number) 公式的推导

    卡特兰数的英文维基讲得非常全面,强烈建议阅读! Catalan number - Wikipedia (本文中图片也来源于这个页面) 由于本人太菜,这里只选取其中两个公式进行总结. (似乎就是这两个比 ...

  5. [LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析

    本文原题: LeetCode. 给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数. 什么是二叉搜寻树? 二叉查找树(Binary Search Tree),或者是一棵 ...

  6. 卡特兰数 Catalan数 ( ACM 数论 组合 )

    卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1)  编辑 收藏 引用 所属分类: ACM ( 数论 ...

  7. 卡特兰数 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>= ...

  8. 【2020.12.01提高组模拟】卡特兰数(catalan)

    题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...

  9. 卡特兰数(Catalan)及其应用

    卡特兰数 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数前几项 ...

随机推荐

  1. Selenium(Python)PageObject页面对象

    使用PageObject页面对象的好处是, 当页面元素的位置发生改变时, 只需要去修改Xpath或者ID, 而不用去修改测试用例本身: 本次的思路是: 1.常用方法类 2.页面对象类 3.测试用例类 ...

  2. 消费者用nginx做负载均衡,提供者用zookeeper自带功能实现负载均衡

    公司的项目基于阿里的Dubbo微服务框架开发.为了符合相关监管部门的安全要求,公司购买了华东1.华东2两套异地服务器,一套是业务服务器,一套是灾备服务器.准备在这两套服务器上实现Dubbo的分布式服务 ...

  3. .NET邮件发送详情

    ①百度下载个Free Smtp Server ②下载完成后,打开进去,点击左上角的options,弹出窗口,进行如下图选项即可(一般默认已正确选中),然后我们可以把这软件关了. (下次你重启电脑时,也 ...

  4. 使用jenkins构建一个自由风格的项目

    一.创建一个freestyle风格的构建项目 二.输入任务名称和选择任务类型 三.配置项目 3.1:选择代码托管 3.2:到gitlab上去配置deploy key 3.3:到jenkins服务器去生 ...

  5. 《Git学习指南》学习笔记(一)

    第二章 入门 git的安装 在Linux下,git的安装很简单.以我的系统Deepin/Ubuntu为例,只需在终端敲入sudo apt-get install git即可.其他Linux发行版可尝试 ...

  6. phantomjs抛出IOException

    使用phantomjs对网页进行截图遇到的问题 问题描述: 使用的phantomjs版本:phantomjs-2.1.1-windows 使用的截图js文件,\phantomjs-2.1.1-wind ...

  7. LeetCode - 459. Repeated Substring Pattern - O(n)和O(n^2)两种思路 - KMP - (C++) - 解题报告

    题目 题目链接 Given a non-empty string check if it can be constructed by taking a substring of it and appe ...

  8. CryptoZombies学习笔记——Lesson1

    CryptoZombies是一个学习以太坊开发的平台,我将在这里记录学习过程中的一些笔记. 课程网址:cryptozombies.io 首先是第一课——Lesson1:Making the Zombi ...

  9. Eclipse安装颜色主题,个性化你的IDE,让你的IDE焕然一新

    我们都知道eclipse默认的颜色主题是白色的背景,但是如果想改变代码编辑区的背景颜色,需要怎么办呢? 今天给大家介绍一个非常赞的eclipse,可以很方便的根据自己的需求选择喜欢的颜色主题,其他的不 ...

  10. oracle常用函数总结

    Oracle常用函数总结 ---oracle常用函数-----一.数值型常用函数----取整数--select floor(10.1) from dual;--将n四舍五入,保留小数点后m位(默认情况 ...