Welcome to sysong's|

_sysong

园龄:2年7个月粉丝:0关注:0

卡特兰数学习笔记

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

一、引入

问题 1

n+1n1 组成的 2n 项序列 a1,a2,,a2n,求有多少种方案满足其部分和 a1+a2++ak0 (k=1,2,,2n)

分析

设满足条件的方案数(即答案)为 Cn,不满足条件的方案数为 Un

n+1n1 组成的序列总数为 (2n)!n!n!=(2nn)

那么 Cn+Un=(2nn)

我们只要求出 Un,就可以得到 Cn

因为不满足条件,所以一定存在第一个 k,使得 a1+a2++ak<0

因为 k 是第一个,所以 a1+a2++ak1=0,且 ak=1

同时,k 为奇整数。

我们将前 k 项的符号取反,剩下的不变,就可以得到一个由 n+1+1n11 组成的序列,而这个序列和前面不满足条件的序列一一对应(考虑第一个 +1 个数超过 1 的位置,将这个位置及其前面符号取反,就可以得到一个不满足条件的序列)。

那么 Un 等于由 n+1+1n11 组成的序列的个数,即 (2n)!(n+1)!(n1)!=(2nn+1)

所以 Cn=(2nn)(2nn+1)=1n+1(2nn)

即为第 n 个卡特兰数。

扩展

若改为 n+1m1,且 nm,那么有多少种?

分析

同样设满足条件方案数为 An,不满足的为 Un

那么 An+Un=(n+mn)

Un=(n+mn+1),所以 An=(n+mn)(n+mn+1)


问题 2

求以下递推关系的解:

C0=1

Cn=C0Cn1+C1Cn2++Cn1C0=k=0n1CkCnk1

分析

g(x)=C0+C1x+C2x2++Cnxn+ 为数列 C0,C1,,Cn 的生成函数。

(g(x))2=C0C0+(C0C1+C1C0)x+(C0C2+C1C1+C2C0)x2++(C0Cn+C1Cn1++CnC0)xn=i=0Ci+1xi

x(g(x))2=i=0CixiC0=g(x)C0x(g(x))2g(x)+1=0

解得

g(x)=1±14x2x

limx0+g(x)=C0=1limx0+g(x)=limx0+1±14x2x=limx0+2114x

g(x)=114x2x

由牛顿二项式定理,

(1+z)12=k=0(12k)xk

对于 k>0

(12k)=12(121)(12k+1)k!=(1)k12k1×3×5××(2k3)k!=(1)k12k1×2×3×4××(2k3)×(2k2)2×4××(2k2)×(k!)=(1)k1k×22k1(2k2)((k1)!)2=(1)k1k×22k1(2k2k1)

4xz,可得

14x=1+k=1(1)k1k22k1(2k2k1)(1)k4kxk=12k=11k(2k2k1)xk

g(x)=12x(1(12k=11k(2k2k1)xk))=12x2k=11k(2k2k1)xk=k=01k+1(2kk)xk

Cn=1n+1(2nn)

即第 n 个卡特兰数。


二、应用

例 1

问题

2n 个人排列进入剧场,票价 5 角。其中 n 个人有 5 角硬币,另外 n 个人有一元硬币。初始售票处无零钱。问有多少种排列方法使得每个有一元硬币的人买票时,都有 5 角找零?

分析

5 角找零的条件为:在任一位置,有 5 角硬币的人总数大于等于有一元硬币的人个数。

将有 5 角硬币的人看作 +1,有一元硬币的人看作 1,那么就转化为引入中的问题 1。答案为第 n 个卡特兰数。


例 2

问题

对于一个 n×n 的正方形网格,从左下角到右上角,每次只能向右或向上走一格,且不能越过对角线,问有多少种走法。

分析

考虑将向右记为 +1,向上记为 1,那么合法路径的数目就等于满足 i=1kai0 ,k=1,2,,2n,即引入中问题 1。

所以答案即为第 n 个卡特兰数。


例 3

问题

计算包含 n 个左括号和 n 个右括号的合法括号序列种数。

合法括号序列定义:

  1. 空串为合法序列。

  2. 若 A 为合法序列,那么 (A) 为合法序列。

  3. 若 A,B 均为合法序列,那么 AB 为合法序列。

分析

显然在任何位置,左括号的个数一定大于等于右括号的个数。

考虑将左括号看作 +1,右括号看作 1,那么又转化成了引入中的问题 1,答案是第 n 个卡特兰数。


例 4

问题

计算 n 个数合法的出栈序列。

分析

法一:将进栈看作 +1,出栈看作 1,那么就转化成了引入中的问题 1。

法二:

设答案为 cn

显然 c0=1

我们考虑 cn 怎么得来。

令最后一个出栈的数为 k

那么在 k 入栈之前,1,2,,k1k1 个数已经入栈并出栈了,方案数为 ck1

k 入栈之后,k+1,,n1,nnk 个数会入栈并出栈,方案数为 cnk

故总方案数为 k=1nck1cnk=k=0n1ckcnk1=Cn

转化成引入中的问题 2。


例 5

问题

求将 n+2 条边的凸多边形用不相交的对角线分割成三角形区域的方案数。

分析

如图,我们选定这个多边形的一条边作为基边,那么在每一种划分中这条基边都是一个三角形区域的边,且这个三角形区域将整个多边形分成了三部分:这个三角形区域,一个含有 k+1+1=k+2 条边的多边形区域,还有一个含有 n+2k11+1=nk+1 条边的区域。

设含 n+2 条边的方案数为 cn

那么由分析可知,cn=k=0n1ckcnk1=Cn

转化为引入中的问题 2。


例 6

问题

求含有 n 个节点的二叉树的个数。

分析

首先固定一个根节点,左子树有 k 个节点,那么右子树有 nk1 个节点。

设答案为 cn,那么 cn=k=0n1ckcnk1=Cn

转化为引入中的问题 2。


三、公式

  1. 计算式:Cn=1n+1(2nn)
  2. 递推式 1:C0=1,Cn=k=0n1CkCnk1
  3. 递推式 2:C0=1,Cn=4n2n+1Cn1
  4. 增长趋势:Cn4nn32π

本文作者:_sysong

本文链接:https://www.cnblogs.com/sysong2006/p/16634272.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   _sysong  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
评论
收藏
关注
推荐
深色
回顶
收起