Catalan数学习笔记

Catalan数——卡特兰数 Catalan数——卡特兰数 今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来 后来查了下,原来是Catalan数。悲剧啊,现在整理一下 一、Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n) = h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1),n>=2该递推关系的解为:h(n) = C(2n 阅读详情

一.Catalan数.

Catalan数:卡特兰数CnC_nCn​表示nnn个000和nnn个111可以组成的不同序列的数量,其中这种序列必须满足每一个前缀中111数量必须不少于000的数量.

Catalan数的通项公式:
Cn=1n+1(2nn) C_n=\frac{1}{n+1}\binom{2n}{n} Cn​=n+11​(n2n​)

证明:
我们把所有这样的nnn个111和000组成的不同序列全部列出来,这些数列的数量为(2nn)\binom{2n}{n}(n2n​).
把所有破坏这种性质的序列都取出来,发现把它们第一个破坏性质的位置后的所有010101取反,然后我们可以得到一个n−1n-1n−1个111和n+1n+1n+1个000组成的序列.
同理这样的由n−1n-1n−1个000和n+1n+1n+1个111组成的序列也对应一个破坏性质的序列.
很容易发现这两种序列是一一对应关系,而n−1n-1n−1个111和n+1n+1n+1个000组成的不同序列数量为(2nn−1)\binom{2n}{n-1}(n−12n​)种.最后推导一下:
Cn=(2nn)−(2nn−1)=(2n)!n!n!−(2n)!(n−1)!(n+1)!=(n+1)(2n)!−n(2n)!(n+1)n!n!=1n+1(2nn) C_n=\binom{2n}{n}-\binom{2n}{n-1}=\frac{(2n)!}{n!n!}-\frac{(2n)!}{(n-1)!(n+1)!}=\frac{(n+1)(2n)!-n(2n)!}{(n+1)n!n!}=\frac{1}{n+1}\binom{2n}{n} Cn​=(n2n​)−(n−12n​)=n!n!(2n)!​−(n−1)!(n+1)!(2n)!​=(n+1)n!n!(n+1)(2n)!−n(2n)!​=n+11​(n2n​)

证毕.

进出栈序列统计:有一个栈和nnn个互不相同元素,现在要求不改变它们的顺序让它们进栈与出栈,问出栈序列的方案数.

分析:将进栈看为111,出栈看为000,就与Catalan数的组合意义相同了,方案数即为CnC_nCn​.


二.格路径数统计.

格路径计数:给定一张n∗nn*nn∗n的网格,每次走只能向右或者向上走一步,求从(0,0)(0,0)(0,0)走到(n,n)(n,n)(n,n)不越过对角线y=xy=xy=x,求方案数.

分析:将棋盘按照对角线分为两部分,两部分的方案一一对应,现在只考虑其中的右下部分.

现在把向右走看为向量(1,0)(1,0)(1,0),向上走看为向量(0,1)(0,1)(0,1),那么显然两个向量(1,0)(1,0)(1,0)和(0,1)(0,1)(0,1)分别对应Catalan数组合意义中的111和000,方案数就为CnC_{n}Cn​,乘222后得到答案2Cn2C_{n}2Cn​.

格路径计数拓展1:不越过的对角线变为直线y=x+my=x+my=x+m,,求方案数.

与上面Calatan数的通项公式类似的,答案为:
(2nn)−(2nn−m−1) \binom{2n}{n}-\binom{2n}{n-m-1} (n2n​)−(n−m−12n​)

格路径计数拓展2:由n∗nn*nn∗n的网格变为n∗m(n<m)n*m(n<m)n∗m(n<m)的网格,求方案数.

分析:转化为一张网格上通过向量(1,1)(1,1)(1,1)和(1,−1)(1,-1)(1,−1)从(0,0)(0,0)(0,0)走到(n+m,n−m)(n+m,n-m)(n+m,n−m)不接触直线y=−1y=-1y=−1的方案数.

通过补集转化,答案变成总方案数减去经过y=−1y=-1y=−1的方案数,显然的总方案数为(n+mm)\binom{n+m}{m}(mn+m​).

再把原点(0,0)(0,0)(0,0)到第一次接触y=−1y=-1y=−1的那一段沿y=−1y=-1y=−1对称,方案一一对应,且此时向量(1,1)(1,1)(1,1)多了一个,向量(1,−1)(1,-1)(1,−1)少了一个,所以方案数为(n+mm−1)\binom{n+m}{m-1}(m−1n+m​).

于是答案就为:
(n+mm)−(n+mm−1) \binom{n+m}{m}-\binom{n+m}{m-1} (mn+m​)−(m−1n+m​)



三.Catalan数的一阶递推式.

根据Catalan数的通项公式,我们可以推导:
CnCn−1=1n+1(2nn)1n(2n−2n−1)=(2n)!(n+1)!n!(2n−2)!n!(n−1)!=(2n)!n!(n−1)!(2n−2)!(n+1)!n!=2n(2n−1)n(n+1)=4n2−2nn2+n=4n−2n+1 \frac{C_n}{C_{n-1}}=\frac{\frac{1}{n+1}\binom{2n}{n}}{\frac{1}{n}\binom{2n-2}{n-1}}\\ =\frac{\frac{(2n)!}{(n+1)!n!}}{\frac{(2n-2)!}{n!(n-1)!}}\\ =\frac{(2n)!n!(n-1)!}{(2n-2)!(n+1)!n!}\\ =\frac{2n(2n-1)}{n(n+1)}\\ =\frac{4n^2-2n }{n^2+n}\\ =\frac{4n-2}{n+1} Cn−1​Cn​​=n1​(n−12n−2​)n+11​(n2n​)​=n!(n−1)!(2n−2)!​(n+1)!n!(2n)!​​=(2n−2)!(n+1)!n!(2n)!n!(n−1)!​=n(n+1)2n(2n−1)​=n2+n4n2−2n​=n+14n−2​

那么我们就有了Catalan数的递推式1:
Cn=(4n−2)Cn−1n+1 C_{n}=\frac{(4n-2)C_{n-1}}{n+1} Cn​=n+1(4n−2)Cn−1​​

初始条件为C0=1C_0=1C0​=1.


四.拟Catalan数.

拟Catalan数:定义拟Catalan数Cn∗=n!Cn−1C_{n}^{*}=n!C_{n-1}Cn∗​=n!Cn−1​.

我们可以通过Catalan数的递推公式来推出拟Catalan数的递推公式:
Cn∗=n!Cn−1=n!∗4n−6n∗Cn−2=(4n−6)Cn−1∗ C_{n}^{*}=n!C_{n-1}=n!*\frac{4n-6}{n}*C_{n-2}=(4n-6)C_{n-1}^{*} Cn∗​=n!Cn−1​=n!∗n4n−6​∗Cn−2​=(4n−6)Cn−1∗​

初始条件C0∗=1C_{0}^{*}=1C0∗​=1.


五.序列合并方案统计与Catalan数的另一个递推式.

序列合并方案统计1:对于一个长度为nnn的序列aia_iai​,每次可以把两个数相乘,求将序列相乘成一个数的方案数.

分析:考虑递推,设长度为nnn的序列方案数为fnf_nfn​,显然初态f0=1f_0=1f0​=1.

对于fn−1f_{n-1}fn−1​包含的每一种方案,我们考虑如何插入ana_nan​.对于其中一个乘式(a∗b)(a*b)(a∗b),把ana_nan​插入进去会有以下444种情况:
((an∗a)∗b)((a∗an)∗b)(a∗(an∗b))(a∗(b∗an)) ((a_n*a)*b)\\ ((a*a_n)*b)\\ (a*(a_n*b))\\ (a*(b*a_n)) ((an​∗a)∗b)((a∗an​)∗b)(a∗(an​∗b))(a∗(b∗an​))

总共有n−2n-2n−2个乘式,所以有4(n−2)fn−14(n-2)f_{n-1}4(n−2)fn−1​的贡献.

另外,对于整一个式子,还有222种情况:
an∗aa∗an a_n*a\\ a*a_n an​∗aa∗an​

所以可以得到fnf_nfn​的递推式:
fn=[4(n−2)+2]fn−1=(4n−6)fn−1 f_n=[4(n-2)+2]f_{n-1}=(4n-6)f_{n-1} fn​=[4(n−2)+2]fn−1​=(4n−6)fn−1​

我们发现这个数列的初态和递推公式均与拟Catalan数相同,所以这个问题的方案数就是Cn∗C_{n}^{*}Cn∗​.

序列合并方案统计2:对于一个长度为nnn的序列aia_iai​,每次可以把相邻两个数相乘,求将序列相乘成一个数的方案数.

分析:显然对于统计问题1,总会有n!n!n!方案对应着统计问题2中的同一种方案,那么答案就是Cn∗n!=Cn−1\frac{C_{n}^{*}}{n!}=C_{n-1}n!Cn∗​​=Cn−1​.

换一种分析方法:我们重新考虑fnf_nfn​的一个更加暴力的转移:
fn=∑i=1n−1fifn−i f_{n}=\sum_{i=1}^{n-1}f_{i}f_{n-i} fn​=i=1∑n−1​fi​fn−i​

而fn=Cn−1f_n=C_{n-1}fn​=Cn−1​,所以有:
Cn−1=∑i=1n−1Ci−1Cn−1−i=∑i=0n−2CiCn−2−i C_{n-1}=\sum_{i=1}^{n-1}C_{i-1}C_{n-1-i}\\ =\sum_{i=0}^{n-2}C_{i}C_{n-2-i} Cn−1​=i=1∑n−1​Ci−1​Cn−1−i​=i=0∑n−2​Ci​Cn−2−i​

即:
Cn=∑i=0n−1CiCn−1−i C_{n}=\sum_{i=0}^{n-1}C_{i}C_{n-1-i} Cn​=i=0∑n−1​Ci​Cn−1−i​

这就是Catalan数的递推公式2.


六.BST方案统计与凸多边形三角划分.

BST方案统计:给定nnn个点权,问对应BST的形态有多少种.

分析:设fnf_nfn​表示nnn个点组成的BST形态数量,那么我们可以枚举根的左子树大小,得到方程:
fn=∑i=0n−1fifn−1−i f_n=\sum_{i=0}^{n-1}f_{i}f_{n-1-i} fn​=i=0∑n−1​fi​fn−1−i​

发现就是个Catalan数,答案即为CnC_{n}Cn​.

凸多边形三角划分:将一个nnn个顶点的凸多边形用n−3n-3n−3条线段划分成n−2n-2n−2个三角形,求方案数.

分析:设fnf_nfn​表示将n+2n+2n+2个顶点组成的凸多边形划分成nnn个三角形的方案数,可以直接转移:
fn=∑i=0n−1fifn−1−i f_n=\sum_{i=0}^{n-1}f_{i}f_{n-1-i} fn​=i=0∑n−1​fi​fn−1−i​

发现还是Catalan数,那么答案就是Cn−2C_{n-2}Cn−2​.

Catalan数计算公式 #include&lt;iostream&gt; using namespace std; struct BIGNUM { int s[200], l; }c[120]; //c[i]=hi BIGNUM operator*(BIGNUM a, int b) //a=a*b { for (int i = 0; i &lt; a.l; i++) a.s[i] *= b; for(int i=... 阅读详情

相关推荐

Unity3D 简单水面shader的实现

实现思路 今天来实现一个简单的水面效果。水面的话主要是以下几个效果叠加 1.水面的动态波浪效果,我们这里使用最简单的正弦波加上法线贴图来模拟。如果想要更精确的波动效果可以考虑使用Gerstner波 2.不同水深颜色不同的效果,使用该顶点深度和顶点坐标的差值来计算深度,然后映射到颜色 3.浪涌效果,还是根据顶点深度和顶点坐标的差值来计算深度,然后叠加上一层浪涌 4.折射效果,用grabpass,采样之后进行偏移,最后叠加上去。 代码实现 首先是顶点位移函数,使用正弦函数代入顶点的x坐标和z坐标来算,因为这里写

o83290102o5的博客 1万+

【数学】Catalan数

Catalan数是一个特殊的正整数序列,其定义是Cn=1n+1(2nn)C_n=\frac{1}{n+1}{2n \choose n}Cn​=n+11​(n2n​)这个序列频繁的出现在非常多的组合数学的场合中。为了加深印象,特写一些总结。 1、给定整数nnn,则合法的长度为2n2n2n的括号序列总共有CnC_nCn​个。 证明:想象一个从(0,0)(0,0)(0,0)到(n,n)(n,n)(n,n...

数学、算法爱好者的博客 638

[kriging](一)网上下载的kriging克里金的C++程序的初步调试

笔者在网上下载了一份克里金的C++程序,水平有限,正在逐步地调试中。 初步 克里金法现在在许多软件都已经有集成了,据笔者所知: arcgis : 看过有的arcgis培训视频里面简略介绍了里面的插值方法,有克里金。 surfer :笔者用过这个,效果很好。 gocad :听说有 landmark &jason :研究生时候用的专业的石油物探软件,里面有克里金法,万恶的开始。 pykrig...

FOREST优快云 5610

Catalan数

Catalan(卡特兰)数 卡特兰数,又称卡塔兰数,是组合数学中一种常出现于各种计数问题中的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。1730年左右被蒙古族数学家明安图 (1692-1763)使用于对三角函数幂级数的推导而首次发现,1774年被发表在《割圜密率捷法》。 ——百度百科 基本概念 引入 首先我们想这么一个问题: 对于一个n×nn \times nn×n的一个矩形方格,连接其副对角线。 一个BugBugBug(虫子)现在处在左下角,每次只能向上或向右移动一

jiahonghao2002的博客 4376

40-Type-C电路设计

Type-C电路设计

weixin_66510961的博客 9649

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

springboot 启动方式 装配流程 自定义starter 文件加载顺序 常见设计模式

sv 937

Catalan (卡特兰数)

Catalan的介绍 Acwing 197 阶乘分解 题解 Acwing130 火车进出栈问题 题解

日常记录,挨打要立正! 6718

SDM660电源部分配置:

SDM660电源部分配置: Panel power supplies 1、Reference power supplies Description Name Regulator Voltage (V) Panel power supply 0 vddio PMIC 660/L11 1.8 Panel power supply 1 Lab PMIC 660/lab 4.6 Panel power s...

weixin_41811215的博客 4728

卡特兰数(Catalan)

什么是卡特兰数? 明安图数,又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现于各种计数问题中的数列。以中国蒙古族数学家明安图 (1692-1763)和比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为(从第零项开始) : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, … 卡特兰数的几何意义 简单来说,卡特兰数就是一个有规律的数列,在坐标图中可以表示为:从原点(0,0)出发,每次向x轴或者y轴正方向移动1个单位,直到

2021dragon的博客 4万+

飞牛Docker部署Zerotier后无法访问?三步搞定SSH权限配置!

本文详细解析了在飞牛NAS上通过Docker部署Zerotier后无法访问的常见问题及解决方案。重点介绍了SSH权限配置、tun模块加载和Docker容器权限设置等关键步骤,帮助用户快速解决虚拟网络接口的权限问题,确保Zerotier节点间的正常通信。

qq_27496129的博客 788

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2438

卡特兰数 史上最全最详细讲解!

我是标题党!! 卡特兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名。历史上,清代数学家明安图(1692年-1763年)在其《割圜密率捷法》最早用到“卡塔兰数”,远远早于卡塔兰。有中国学者建议将此数命名为“明安图数”或“明安图-卡塔兰数”。 即卡特兰数是符合以下公式的一个数列! 公式(4个): h(n)= ...

cz9797的博客 3万+

【VTK】VTK中的光标样式

本文分享VTK中的光标设置相关内容技术,希望对各位小伙伴有所帮助!

qq_40041064的博客 1928

Catalan数应用学习笔记

以下是最简单catalan 数的计算代码 //function: calculate nth number for Catalan //parameter: n is the nubmer of function //return: nth number for Catalan int Catalan(int n) { if(n <= 1)

w62345402的博客 348

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【7】Catalan 数学习笔记

本文系统介绍了卡特兰数(Catalan数)的数学性质与应用场景。首先通过递推公式、组合表达式等四种等价形式定义卡特兰数,并指出其前几项为1,1,2,5,14,...。随后通过三个经典问题展示其应用:网格路径计数(不穿过对角线的路径数等价于合法01串计数)、合法括号序列计数以及不同形态二叉树计数,均推导出答案为卡特兰数。最后通过四道OJ例题(涉及字符串生成、数列构造、阶梯划分及概率计算)进一步演示如何识别并应用卡特兰数模型解决问题,强调通过小数据验证规律的重要性。全文旨在帮助读者掌握卡特兰数的核心特征与实际应

Eason_cyx的博客 240

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

卡特兰数(Catalan Number) 学习笔记

一、三个简单的问题 1.给定一串长为2n的01序列,其中0和1的数量相等,满足任意前缀中0的个数不少于1的个数,求序列的个数 2.给出一串长为n的序列,按顺序将他们进栈,随意出栈,求最后进出栈的方案 3.给定一个n个节点的二叉树,求二叉树有多少种(这里定义不同指树的形态不同) 这三个问题都有关catalan数 事实上关于Catalan的性质有关问题很多,这里只是比较针对的列出了几种。 二、求解问题...

weixin_30672019的博客 187

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

算法学习笔记(7)------catalan数

为什么80%的码农都做不了架构师?>>> ...

weixin_33816611的博客 144

Catalan 数计算及应用

一、catalan数由来和性质 1)由来     catalan数(卡塔兰数)取自组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。 卡塔兰数的一般项公式为     令其为h(n)的话,满足h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)    

chlele0105的专栏 1万+

Catalan数的一些结论

此文章有一部分(定理,证明)来自于华中师范大学学报(自然科学版) 主要结论         定理               n个“1”和n个“0”组成的2n位的二进制数,要求从左到右扫描,“1”的累计数不小于“0”的累计数,这样的二进制数的个数位著名的Calatan数 C(2n,n)/(n+1) ,(n>=0)         证明               令An为n个“

sdut_jean的博客 4218

二叉树形态数推导 (Catalan 数)

摘要:树的形态数推导 本文系统推导了不同树结构的形态数目。对于n个节点的二叉树,形态数遵循Catalan数 ( C_n = \frac{1}{n+1}\binom{2n}{n} );k叉树则推广为Fuss-Catalan数 ( C_n^{(k)} = \frac{1}{(k-1)n+1}\binom{kn}{n} )。有序树的形态数仍为Catalan数,而无序树因对称性需用Pólya计数理论求解,无显式解。关键发现:二叉树和k叉树对应Fuss-Catalan数,有序树是Catalan数的平移,无序树需群论处

youngerwang的博客 1205

知识点 - Catalan数

知识点 - Catalan数 解决问题类型: 1.由n个+1和n个-1组成的排列中,满足前缀和>=0的排列有Catalan(N)种。 2.括号化问题。左括号和右括号各有n个时,合法的括号表达式的个数有Catalan(N)种。 3.有n+1个数连乘,乘法顺序有Catalan(N)种,相当于在式子上加括号。 4.n个数按照特定顺序入栈,出栈顺序随意,可以形成的排列的种类有Catalan(N)种。...

qq_41848675的博客 2335

Catalan数计算

递归与分治   简介    要求用递归算法解决具有递推关系的序列和计数问题,用分治法高效解决具有非线性复 杂度的实际问题,结合文件操作处理大规模数据输入的问题,用 clock_t tm=clock()测定算法 执行时间,单位:毫秒。 样例引入   Catalan 数 C(n)的计算:小兔的棋盘 题意:Catalan 数的定义如下,首先规定 C(0)为 1,然后按照下式定义 C(n)。 !Catalan 例如 n=5,C(5)=C(0)C(4)+C(1)C(3)+C(2)C(2)+C(3)C(1)+C(4

kasugano_sora_的博客 1393

Catalan 数的应用

Wikipedia上的Catalan numbers:In combinatorial mathematics, the Catalan numbers form a sequence of natural numbers that occur in various counting problems, often involving recursively defined objects.

fisher_jiang的专栏 2219
上一篇: 【NOIP2015】BZOJ4326 运输计划题解(二分+LCA+树上差分)
下一篇: 蓝书(算法竞赛进阶指南)刷题记录——Codeforces 451 E Devu and Flowers(容斥原理+Lucas定理)
hezlik
博客等级 码龄9年 111粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值