卡特兰数
一、背景与定义
1.背景
Catalan,Eugene,Charles,卡特兰(1814~1894)比利时数学家,生于布鲁日(Brugge),早年在巴黎综合工科学校就读。1856年任列日(Liege)大学数学教授,并被选为比利时布鲁塞尔科学院院士。
卡特兰一生共发表200多种数学各领域的论著。在微分几何中,他证明了下述所谓的卡特兰定理:当一个直纹曲线是平面和一般的螺旋面时,他只能是实的极小曲面。他还和雅可比(Jacobi,C·G·J)同时解决了多重积分的变量替换问题,建立了有关的公式。
1842年,他提出了一种猜想:方程xz-yt=1没有大于1的正整数解,除非平凡情形32-23=1。这一问题至今尚未解决。
(mathoe注:即除了8、9这两个连续正整数都是正整数的方幂外,没有其他。1962年我国数学家柯召以极其精湛的方法证明了不存在三个连续正整数,它们都是正整数的方幂,以及方程x2-yn=1,n>1,xy≠0无正整数解。并且还证明了如果卡特兰猜想不成立,其最小的反例也得大于1016。)
此外,卡特兰还在函数论、伯努利数和其他领域也做出了一定的贡献。
2.定义
卡特兰通过解决凸n边形的剖分得到了数列Cn。
![]()
凸n+2边形用其n-1条对角线把此凸n+2边形分割为互不重叠的三角形,这种分法的总数为Cn。
为纪念卡特兰,人们使用“卡特兰数”来命名这一数列。
据说有几十种看上去毫不相干的组合计数问题的最终表达式都是卡特兰数的形式。卡特兰数在数学竞赛、信息学竞赛、组合数学、计算机编程等都会有其不同侧面的介绍。
3.递推公式
前几个卡特兰数:规定C0=1,而
C1=1,C2=2,C3=5,C4=14,C5=42,
C6=132,C7=429,C8=1430,C9=4862,C10=16796,
C11=58786,C12=208012,C13=742900,C14=2674440,C15=9694845。
递推公式
![]()
圆周上有标号为1,2,3,4,……,2n的共计2n个点,这2n个点配对可连成n条弦,且这些弦两两不相交的方式数为卡特兰数Cn。
4.例题
例1:2003年浙江省小学数学夏令营竞赛考了这个题:圆周上10个点可以连成既不相交,也没有公共端点的5条线段,不同的连法共有_____种。
答:方法的种数是卡特兰数C5=42,此题被收录进单墫主编的知识出版社出版的《华数奥赛强化训练》小学六年级册的“计数问题”专题。

共六种类型,第1类有5种连法,第2类有2种连法,第3类有10种连法,第4类有10种连法,第5类有10种连法,第6类有5种连法。共有42种连法。
例2:1994年《小学数学》有奖征答竞赛:游乐园门票1元一张,每人限购一张。现在有10个小朋友排队购票,其中5个小朋友每人只有1元的钞票一张,另5个小朋友每人只有2元的钞票一张,售票员没有准备零钱。问:有多少种排队方法,使售票员总能找的开零钱?(此题也被许多奥数资料收录为例题或习题,《华罗庚学校数学课本》小学六年级册的思维训练也收有此题)
答:现把拿1元的5个小朋友看成是相同的,把拿2元的5个小朋友也看成是相同的,使用我们常用的“逐点累加法”:
图中每条小横段表示拿1元的小朋友,每条小竖段表示拿2元的小朋友,要求从A走到B的过程中网格中任何点均有横段数不小于竖段数:拿1元的要先,且人数不能少于拿2元的,即不能越过对角线AB:每个点所标的数即为从A走到此点的方法数。求从A到B的走法的方法数。逐点累加可求出为42,即卡特兰数C5=42。

又由于每个小朋友是不相同的,所以共有42×5!×5!=42×120×120=604800种情况。
若把此题的10个人,拿1元的有5人,拿2元的有5人改为共有2n个人,拿1元的n人,拿2元的n人,则符合要求的排队方法数为:
![]()
例3:再一个卡特兰数的例子:
甲乙两人比赛乒乓球,最后结果为20∶20,问比赛过程中甲始终领先乙的计分情形的种数。
即甲在得到1分到19分的过程中始终领先乙,其种数是卡特兰数
![]()
例4:再一个卡特兰数的例子:
饭后,姐姐洗碗,妹妹把姐姐洗过的碗一个一个放进碗橱摞成一摞。一共有n个不同的碗,洗前也是摞成一摞的,也许因为小妹贪玩而使碗拿进碗橱不及时,姐姐则把洗过的碗摞在旁边,问:小妹摞起的碗有多少种可能的方式?
答:得数是第n个卡特兰数Cn。
例5:再一个卡特兰数的例子
一个汽车队在狭窄的路面上行驶,不得超车,但可以进入一个死胡同去加油,然后再插队行驶,共有n辆汽车,问共有多少种不同的方式使得车队开出城去?
答:得数是第n个卡特兰数Cn。
二、证明与例题
1.卡特兰数
,求证:卡特兰数Cn是整数。
证明:
①取整函数不等式:对任意实数x,y有[x+y]≥[x]+[y]。这里[x]表示不大于实数x的最大整数。
解:由定义x≥[x]……(1)
y≥[y]……(2)以上两式相加,得:x+y≥[x]+[y],
把上式再取整,得:[x+y]≥[[x]+[y]]=[x]+[y],即[x+y]≥[x]+[y]。
②1000!的末尾0的个数249个。(现在有的小学奥数书上出现了100!末尾有几个零的题目:24个)
解:1000÷5=200,
200÷5=40,
40÷5=8,
8÷5=1……3
以上各商相加,即得1000!末尾0的个数=200+40+8+1=249个。
③n!的质因数分解式中质因子p的幂次数:
…………(1)
k!的质因数分解式中质因子p的幂次数
…………(2)
(n-k)!的质因数分解式中质因子p的幂次数
…………(3)
这里写成西格马求和式时使用了无穷的形式,但是从某一确定项之后的每项都是0,为了统一,都写成了“∞”形式。
④组合数是整数
⑤卡特兰数是整数
⑥卡特兰数是整数的另外一个证明
④组合数是整数


⑤卡特兰数是整数

⑥卡特兰数是整数的另一个证明

凸六边形剖分成三角形的14种方法,是卡特兰数C4

从左下角(0,0)走到右上角(4,4),只允许向上、向右走,但不允许穿过对角线的方法数是14种,是卡特兰数C4

2.例题
(1) 1936第40届匈牙利奥林匹克数学竞赛 第1题考了Catalan恒等式的证明。
(2)1979第21届国际数学奥林匹克 第1题考了一个卡特兰恒等式的应用的题目
(3)
此题由1989年第1届匈牙利-以色列数学竞赛题改编。
三、例题与代码实现
1.求卡特兰数列的第n项,可以用以下几个公式:
(1)递归公式1:

(2)递归公式2

(3)组合公式1

(4)组合公式2

2.经典例题分析
2.1 进出栈序列
这是一道 最经典 的入门级卡特兰数题目,如果能把这题看懂,相信后面的题目也能迎刃而解。
题目描述
n 个元素进栈序列为:1,2,3,4,...,n,则有多少种出栈序列。
思路
我们将进栈表示为 +1,出栈表示为 -1,则 1 3 2 的出栈序列可以表示为:+1 -1 +1 +1 -1 -1。

根据栈本身的特点,每次出栈的时候,必定之前有元素入栈,即对于每个 -1 前面都有一个 +1 相对应。因此,出栈序列的 所有前缀和 必然大于等于 0,并且 +1 的数量 等于 -1 的数量。
接下来让我们观察一下 n = 3 的一种出栈序列:+1 -1 -1 +1 -1 +1。序列前三项和小于 0,显然这是个非法的序列。
如果将 第一个 前缀和小于 0 的前缀,即前三项元素都进行取反,就会得到:-1 +1 +1 +1 -1 +1。此时有 3 + 1 个 +1 以及 3 - 1 个 -1。
因为这个小于 0 的前缀和必然是 -1,且 -1 比 +1 多一个,取反后,-1 比 +1 少一个,则 +1 变为 n + 1 个,且 -1 变为 n - 1 个。进一步推广,对于 n 元素的每种非法出栈序列,都会对应一个含有 n + 1 个 +1 以及 n - 1个 -1 的序列。
如何证明这两种序列是一一对应的?
假设非法序列为 A,对应的序列为 B。每个 A 只有一个"第一个前缀和小于 0 的前缀",所以每个 A 只能产生一个 B。而每个 B 想要还原到 A,就需要找到"第一个前缀和大于 0 的前缀",显然 B 也只能产生一个 A。

每个 B 都有 n + 1 个 +1 以及 n - 1 个 -1,因此 B 的数量为 ,相当于在长度为 2n 的序列中找到n + 1个位置存放 +1。相应的,非法序列的数量也就等于
。
出栈序列的总数量共,因此,合法的出栈序列的数量为
。
此时我们就得到了卡特兰数的通项
,至于具体如何计算结果将会在后面进行介绍。
2.2 括号序列
题目描述
n 对括号,则有多少种 “括号匹配” 的括号序列

思路
左括号看成 +1,右括号看成 -1,那么就和上题的进出栈一样,共有
种序列。
2.3 二叉树
题目描述
n + 1 个叶子节点能够构成多少种形状不同的(国际)满二叉树
(国际)满二叉树定义:如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树。

思路
使用深度优先搜索这个满二叉树,向左扩展时标记为 +1,向右扩展时标记为 -1。
由于每个非叶子节点都有两个左右子节点,所有它必然会先向左扩展,再向右扩展。总体下来,左右扩展将会形成匹配,即变成进出栈的题型。n + 1个叶子结点会有 2n 次扩展,构成
种形状不同的满二叉树。
2.4 电影购票
题目描述
电影票一张 50 coin,且售票厅没有 coin。m 个人各自持有 50 coin,n 个人各自持有 100 coin。
则有多少种排队方式,可以让每个人都买到电影票。
思路
持有 50 coin 的人每次购票时不需要找零,并且可以帮助后面持有 100 coin 的人找零;而对于持有 100 coin 的人每次购票时需要找零,但 100 coin 对后面的找零没有任何作用。
因此,相当于每个持有 100 coin 的人都需要和一个持有 50 coin 的人进行匹配。我们将持有 50 coin 的标记为 +1,持有 100 coin 的标记为 -1,此时又回到了进出栈问题。
不同的是,m 并一定等于 n,且排队序列是一种排列,需要考虑先后顺序,例如各自持有 50 coin 的甲和乙的前后关系会造成两种不同的排队序列。所以,将会有
第二项为什么是
,其实很简单,我们每次把第一个前缀小于0 的前缀取反后,会造成+1多了一个而-1少了一个。这里+1有m个,-1有n个,取反后+1变成m + 1个,-1变成n-1个,总和不变。
3.有下面的练习题:http://acm.hdu.edu.cn/showproblem.php?pid=2067

代码:

暂时,就归纳这么多吧!!。。。。(仅限内部使用)
参考:https://www.cnblogs.com/g0feng/archive/2012/05/26/2519120.html
https://www.bbsmax.com/A/ke5j6GNg5r/

浙公网安备 33010602011771号