卡特兰数(Catalan number)

Catalan数列

目录

定义

Number

Catalan数列的前几项为(从 f1 开始):
1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...
在递归定义中,递推起点(边界) f0=f1=1
f0 可理解成 值为 1

说明

首先,Catalan数 并没有十分明确的意义,只是一个十分常见的数学规律

但可以将 Catalan数 理解为在平面直角坐标系上,从原点 O(0,0) 开始,每一次只能向上或向右移动一步,直到移动到第一象限的点 N(n,n)n0 , N 有可能位于原点 O 的位置),Catalan数列 第 n 项(就是 fn ) 就是总方案数的 值

另外,还可以将 Catalan数 理解为括号匹配 —— 对于 fn 来说:就是有 2n 个括号( n个左括号, n 个右括号),并将这些括号进行匹配, fn 就是这 2n 个括号匹配后,符合条件的总方案个数的 值


除此之外,还有其它的理解方法(例如 进出栈问题二叉树构成问题 等)

表示

递推起点(边界) f0=f1=1

1. 递推定义

fn=f0fn1+f1fn2++fn2f1+fn1f0=k=1nfk1fnk

2. 递推关系

fn=4n2n+1fn1

3. 通项公式

fn=1n+1C2nn=C2nnn+1

4. 通项公式II

fn=C2nnC2nn1

证明

(对于每个公式,并非按照顺序证明,以公式相互的关联依次证明)

1. 公式4

  1. 通项公式II
    fn=C2nnC2nn1$

关于此公式,应该是有多种证明,在此介绍一种常见的证明方法,如下:

首先,如下图(就以下面的这个例子证明)
image

就拿这张图来说吧

如图,从原点 O(0,0) 到 点 N(7,7) ,且每一次只能向上或向右移动一步,并不超过第一象限的角平分线(就是不超过图中蓝色的一条 —— (x,x),即不到达图中红色的一条 —— (x,x+1) ),那么合法的总方案数的值就是 fn (Catalan数列 的 第 n 项)
其中,黄色的与紫色的线就是合法的,而绿色的就是不合法的

我们还可以将其转化为括号匹配——其中向右为 ( ,向上为 )
那么图中三条线就可以分别表示为:
黄色线—— ((())((())))()  显然是合法的
紫色线—— ((((((()))))))  显然是合法的
绿色线—— ()))))(((())((  显然是不合法

但是

想要证明公式 fn=C2nnC2nn1 ,我们就需要用到正难则反的思想——就是 总的-不满足(不合法)的 (间接法)

“总的” 就是 C2nn

Why?

可以理解为 2n 个括号(其中左括号有 n 个,右括号也有 n 个),如果我们先在 2n 个括号的位置中选出 n 个左括号的位置(右括号也可以),那么右括号(左括号)的位置同样确定了

例如:当 n=5 时,(此处选出一种情况分析)从 2n(也就是10) 个位置中选出 n 个右括号的位置,为
(-(-(-(--(- ——(其中短横线为未定的右括号的位置)
显然 右括号的位置已经是确定了的

现在我们将不满足(不合法)的设为 A ,那么就是

fn=C2nnA

大家都知道, A 肯定是 C2nn1 ,但是是怎么得到的呢?

好,下面先看看下面这张图
image
这是一张与 f7 有关的图——从 (0,0)(7,7)

其中,绿色的线,表示为 (()))(())))(((
显然是不合法的
因为绿线越过了蓝线,并碰到了红线

不过我们可以将绿线从第一次碰到红线的点开始,将后面的点(线)按红线 (y=x+1) 对称
操作完后就如紫线所示
显然,紫线终究会到达点 N(6,8) ,表示为 (()))))(((())) ,共有 6 个左括号 8 个右括号
对于每一条紫线,都有一条不合法的绿线与之对应——就是 一 一 对 应
对于 f7 不合法的就是从 14 个括号中选出 6 个左括号(或者 8 个右括号),有 C146 或者 C148 ,这两个式子是相等的
然后用上之前的公式,求得 f7 的值,即

f7=C147C146

显然,对于任意一个 fn —— 从 (0,0)(n,n) ,都可以以上述方法求得
即 任意一条绿线(不合法) 沿 红线(y=x+1) 对称之后, 都会到达 点 (n1,n+1)
同样是有 n1 个左括号与 n+1 个右括号
且绿线与红线是 一 一 对 应
则不合法的就有 C2nn1C2nn+1 (两个式子相等)

对应上面的公式

fn=C2nnA

我们可以得到其中的 A=C2nn1=C2nn+1
所以得到公式

fn=C2nnC2nn1

得证 公式4



2. 公式1

紧接着,就是证明公式1

递推起点(边界) f0=f1=1
1. 递推定义
fn=f0fn1+f1fn2++fn2f1+fn1f0=k=1nfk1fnk

对于这一个公式就会更主要的运用到括号匹配原理,属于直接法

首先让我们先来熟悉一下括号匹配
f1 --> 2 个括号
f2 --> 4 个括号
f3 --> 6 个括号


fn --> 2n 个括号


接下来就进入主要的证明过程

首先 就直接以 fn 为例 进行证明
fn 是可以理解为有 2n 个括号 可以组成的合法的括号序列的个数的值
我们设其中的一个括号序列为 (()())((()()))
如下图
image
显然,共有 n 个左括号,我们就抓与最后一个右括号匹配的左括号(设这是第 i 个左括号)的标准进行分类讨论

i 个左括号前就有 (i1) 括号,即有 fi1 种情况
i 个左括号及以后就有 (ni) 括号,即有 fni 种情况
这种情况下,共有 fi1fni 种情况

很容易发现, i 的取值为 1in

所以(公式中用 k 代替 i

fn=k=1nfk1fnk

得证 公式1



接下来的两个公式就比较的简单了

3. 公式3

  1. 通项公式
    fn=1n+1C2nn=C2nnn+1

其实这个公式就是由前面已经证明的公式4推到而来

  1. 通项公式II
    fn=C2nnC2nn1

具体过程如下:

fn=C2nnC2nn1=(2n)!n!n!(2n)!(n+1)!(n1)!=1n+1((2n)!(n+1)n!n!(2n)!n!(n1)!)=1n+1((2n)!(n+1)n!n!(2n)!nn!n!)=1n+1(2n)!(n+1n)n!n!=1n+1(2n)!n!n!=1n+1C2nn=C2nnn+1fn=1n+1C2nn=C2nnn+1



得证 公式3




4. 公式2

  1. 递推关系
    fn=4n2n+1fn1

得证 公式2

证毕

推荐链接

%%%1
%%%2
%%%3







~~~

posted @   Mingrui_Yang  阅读(147)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示