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

简介: 卡特兰数(Catalan Number) 算法、数论 组合~

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


卡特兰数的前几个数

前20项为(OEIS中的数列A000108):1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190


在这里我只详细证明一个例子:

(和我后面要写的一个HD题目有关).(HD1133题)

即排队买票问题(出栈次序问题):

一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?

 有2n个人排成一行进入公园。入场费1元。其中只有n个人有一张1元钞票,另外n人只有2元钞票,剧院无其它钞票,问有多少中方法使得只要有2元的人买票,售票处就有1元的钞票找零?(将持1元者到达视作将1元入栈,持2元者到达视作使栈中某1元出栈)


不难看出,该题求的是左端点为首元素的任意区间内,1的个数大于等于2的个数。


方法一:折现法

可以认为问题是,任意两种操作,持1元者买票是操作一,持2元买票者是操作二。要求每种操作的总次数一样,且进行第k次操作2前必须先进行至少k次操作1。我们假设一个人在原点,操作1是此人沿右上角45°走一个单位(一个单位设为根号2,这样他第一次进行操作1就刚好走到(1,1)点),操作2是此人沿右下角45°走一个单位。第k次操作2前必须先进行至少k次操作1,就是说明所走出来的折线不能跨越x轴走到y=-1这条线上!在进行n次操作1和n此操作2后,此人必将到到达(2n,0)!若无跨越x轴的限制,折线的种数将为C(2n,n),即在2n次操作中选出n次作为操作1的方法数。

image.png



现在只要减去跨越了x轴的情况数。对于任意跨越x轴的情况,必有将与y=-1相交。找出第一个与y=-1相交的点k,将k点以右的折线根据y=-1对称(即操作1与操作2互换了)。可以发现终点最终都会从(2n,0)对称到(2n,-2)。由于对称总是能进行的,且是可逆的。我们可以得出所有跨越了x轴的折线总数是与从(0,0)到(2n,-2)的折线总数。而后者的操作2比操作1要多0-(-2)=2次。即操作1为n-1,操作2为n+1。总数为C(2n,n-1)。

image.png



这个证明的关键就是最终一定会到达(2n,0)这个点。


对于不满足情况的方案,它一定会越过y=-1,捉住这个特点,我们可将求不合法的方案数这个问题换个说法来:从(0,0)到(2n,-2)一共有多少种走法?这个走法数就是C(2n,n-1)因为走右下角的要多走2步,同时一共只走2n步,那就右下角走n+1步,方案法就是2n选n-1.


合法数=C(2n,n)-C(2n,n-1);


方法二:


还可以等价为求从A点到B点不超过(可接触)红色对角线的最短路径的数量。


image.png


如图,易知所有超过红色红色对角先的路径都会碰到绿线。

对A做关于绿线的对称点A’。则A’到B点的路径总数即为非法路径总数。

image.png



合法路径数=总路径数-非法路径数=C(2n,n)-C(2n,n-1)。


每個人都是不一樣的,所以需要全排列* n!*n!


可以推广到一般形式,1元的m人,2元的n人。

( C(m+n,n) - C(m+n,m+1) ) * m! * n!=

( C(m+n,n) - C(m+n,n-1) ) * m! * n!


目录
相关文章
|
5月前
|
算法 安全 数据挖掘
解锁编程之门:数论在算法与加密中的实用应用
解锁编程之门:数论在算法与加密中的实用应用
|
算法 Java C++
秒懂算法 │数论之GCD和LCM
本篇内容介绍了GCD和LCM的多种编码方法及其典型例题。
1998 0
秒懂算法 │数论之GCD和LCM
数论整理之欧几里得算法gcd
数论整理之欧几里得算法gcd
|
算法 程序员
算法集训 | 暑期刷题营】8.12题---数论
算法集训 | 暑期刷题营】8.12题---数论
算法集训 | 暑期刷题营】8.12题---数论
|
算法 C++
算法基础系列第四章——数论之从欧拉卷到欧几里得(2)
算法基础系列第四章——数论之从欧拉卷到欧几里得(2)
94 0
算法基础系列第四章——数论之从欧拉卷到欧几里得(2)
|
算法 C++
算法基础系列第四章——数论之从欧拉卷到欧几里得(1)
算法基础系列第四章——数论之从欧拉卷到欧几里得(1)
158 0
算法基础系列第四章——数论之从欧拉卷到欧几里得(1)
|
算法 C++
算法基础系列第四章——数论之质数与约数(2)
算法基础系列第四章——数论之质数与约数(2)
120 0
算法基础系列第四章——数论之质数与约数(2)
|
机器学习/深度学习 算法 C++
算法基础系列第四章——数论之质数与约数(1)
算法基础系列第四章——数论之质数与约数(1)
186 0
算法基础系列第四章——数论之质数与约数(1)
|
算法
【算法合集】关于数论
裴蜀定理:若 a, b是整数,且 (a, b) = d,那么对于任意的整数 x, y, ax + by 都一定是 d的倍数,特别地,一定存在整数 x, y使 ax + by = d成立。
103 0
【算法合集】关于数论
|
机器学习/深度学习 算法
ACM模板——卡特兰数(Catalan)算法
ACM模板——卡特兰数(Catalan)算法
173 0
ACM模板——卡特兰数(Catalan)算法