卡特兰数(Catalan number)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了卡特兰数(Catalan number)相关的知识,希望对你有一定的参考价值。
参考技术A 1.卡特兰数是一种数列,以比利时的数学家欧仁·查理·卡塔兰命名。2.卡特兰数列:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012……
将递推公式【1】转化成给定N个节点,能构成多少种形状不同的二叉树问题。
将二叉树分为左子树和右子树以及根节点,已知根节点需要1个节点数,令i(i<N)个节点构成左子树,得到N - i - 1个节点构成右子树。这时可将由i个节点的左子树递归看成由i个节点构成的树的问题,同样N-i-1个节点的右子树仍可递归看成N-i-1个节点构成的树。
h(i)·h(N - i - 1)即第i(0≤i≤N-1)种情形,又因为i的取值范围为[0,N-1],所以得:
h(n)= h(0)h(n - 1) + h(1)h(n-2) + ... + h(n - 1)h(0) (n≥2)【1】。
当N=3时的二叉树种类:
将递推公式【3】转化为01排列问题,有n对01排成一个序列,从左往右统计该序列0和1的个数,1的个数小于等于0的个数即视为合法序列。
将n个0放入2n个位置上有C(2n,n)个组合情况为全排列情形,再减去不合法序列即为卡特兰数。
例如:
001101为一合法序列
011010为不合法序列(异常位为3)
经分析得知不合法序列的异常位总会出现在奇数位。
假设异常位为2i+1(0≤i<n),由此可知[0,2i+1]序列有i个0,i+1个1,在[2i+1,2n]序列有n-i个0,n-i-1个1,将[2i+1,2n]序列中的1置换为0,0置换为1,如(011010==>011101)由此可知2n的序列中有n-1个0,n+1个1,将n-1个0放入2n个位置上则有C(2n,n-1)个组合情况,该排列即为不合法情形。
所以可得:h(n)=C(2n,n)/(n + 1)=C(2n,n) - C(2n,n - 1)(n≥0) 【3】
当n为3时代表有3对括号,用0代表'(',用1代表')'
比如010011对应着
()(())
000111对应着
((()))
反之若101010对应着(不符合的情形)
)()()(
问题转换为,这样的满足条件的01序列有多少个。
我们先把这12个人从矮到高放入队列(0-1-2-3-4-5-6-7-8-9-10-11),然后依照出队的次序选择6个人排在第一排,另外6个排在第二排。用0表示将队列的第一人放在第一排,用1表示表示将队列的第一人放在第二排。那么一个含有6个0,6个1的序列就对应一种方案.
比如000000111111就对应着
第一排:0 1 2 3 4 5
第二排:6 7 8 9 10 11
010101010101就对应着
第一排:0 2 4 6 8 10
第二排:1 3 5 7 9 11
反之若101010101010就对应着(不符合的情形)
第一排:1 3 5 7 9 11
第二排:0 2 4 6 8 10
问题转换为,这样的满足条件的01序列有多少个。
...0
.
.
.
0
。。
Catalan Number-卡特兰数入门
卡特兰数
首先,我们设f(n)=序列个数为n的出栈序列种数。同时,我们假定,从开始到栈第一次出到空为止,这段过程中第一个出栈的序数是k。特别地,如果栈直到整个过程结束时才空,则k=n。
令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>=2)
该递推关系的解为:h(n) = C(2n,n)/(n+1),n=0,1,2,3,... (其中C(2n,n)表示2n个物品中取n个的组合数)
问题描述
盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。
按售票处规定,每位购票者限购一张门票,且每张票售价为50元。在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值100元的钱币。假设售票处在开始售票时没有零钱。试问这2N个球迷有多少种排队方式可使售票处不致出现找不出钱的尴尬局面。
例如当n=2是,用A表示手持50元面值的球迷,用B表示手持100元钱的球迷。则最多可以得到以下两组不同的排队方式,使售票员不至于找不出钱。
第一种:A A B B
第二种:A B A B
问题解决
这一类的问题有很多,但最终都脱离不了一个问题:
栈的进出先后顺序
很明显,在栈里,是只有先进了才能出,类似于..左右括号匹配问题(?)
虽然暴搜是可以解决数据范围比较小的问题,但是如果数据大了就需要一些公式...
公式
公式一
递归公式
h(0)=h(1)=1
h(n)= h(0)h(n-1)+h(1)h(n-2) + … + h(n-1)*h(0) (n>=2)
如果我们用这个公式显然我们要使用递归算法,那么数据一大就在时空上很麻烦
公式二
递推公式
h(n)=h(n-1)(4n-2)/(n+1)
这个公式应用递推,看上起十分和善
但对大数据呢?
我们注意到大数据的时候h(n)会很大,这时候题目一般会让你对某素数取模(当然你可以打高精度(划掉))
但你在取模过程中难保一个h(n)%mod=0
那么根据公式下面所有的数都会等于0.
公式三
组合数公式1
h(n)=C(2n,n)/(n+1) (n=0,1,2,…)
卡特兰数可以与组合数联系起来,得到上面的公式
而组合数就是一个杨辉三角,可以递推得到(这个不属于这道题的讨论范围我假装你们都会(逃))
但我们发现对于大数据你要取模,而对于除法你是没办法用膜的性质的(当然你可以应用逆元(划掉)),所以造成了麻烦
公式四
组合数公式2
h(n)=c(2n,n)-c(2n,n-1) (n=0,1,2,…)
与组合数公式1不同这个是两个组合数的减法
减法是可以用膜的性质的.
ov.
以上是关于卡特兰数(Catalan number)的主要内容,如果未能解决你的问题,请参考以下文章