卡特兰数、斯特林数基础

卡特兰数

从格点 ( 0 , 0 ) (0,0) (0,0)走到格点 ( n , n ) (n,n) (n,n),只能向右或向上走,不能穿过对角线,的路径的条数,称为卡特兰数 H n H_n Hn
在这里插入图片描述
则有 H 0 = 1 H_0=1 H0=1

通项公式:

  1. H n = ( 2 n n ) − ( 2 n n − 1 ) H_n=\begin{pmatrix} 2n\\ n \end{pmatrix}-\begin{pmatrix} 2n\\ n-1 \end{pmatrix} Hn=(2nn)(2nn1)
  2. H n = ( 2 n n ) n + 1 H_n=\frac {\begin{pmatrix} 2n\\ n \end{pmatrix}}{n+1} Hn=n+1(2nn)
  3. H n = 4 n − 2 n + 1 H n − 1 H_n=\frac{4n-2}{n+1}H_{n-1} Hn=n+14n2Hn1

折线法

证明一下卡特兰数的公式。

先证明公式1:
如果没有限制,那么路径总数是,从 2 n 2n 2n步移动之中,选出 n n n步向上走,另外 n n n步向右走的方案数 ( 2 n n ) \begin{pmatrix} 2n\\ n \end{pmatrix} (2nn)

如果有限制,我们画出 y = x + 1 y=x+1 y=x+1的函数图像,碰到这条线,意味着不合法。
把所有不合法的路径沿着这条图像对折过来,其终点必然是 ( n − 1 , n + 1 ) (n-1,n+1) (n1,n+1)
换句话说,所有到达 ( n − 1 , n + 1 ) (n-1,n+1) (n1,n+1)的路径,都对应着到达 ( n , n ) (n,n) (n,n)的一条不合法路径。因此答案就是 ( 2 n n ) − ( n + 1 + n − 1 n − 1 ) \begin{pmatrix} 2n\\ n \end{pmatrix}-\begin{pmatrix} n+1+n-1\\ n-1 \end{pmatrix} (2nn)(n+1+n1n1)
在这里插入图片描述

QED.

证明一下公式2:
( 2 n n ) − ( 2 n n − 1 ) \begin{pmatrix} 2n\\ n \end{pmatrix}-\begin{pmatrix} 2n\\ n-1 \end{pmatrix} (2nn)(2nn1)
= ( 2 n ) ! n ! n ! − ( 2 n ) ! ( n + 1 ) ! ( n − 1 ) ! =\frac{(2n)!}{n!n!}-\frac {(2n)!}{(n+1)!(n-1)!} =n!n!(2n)!(n+1)!(n1)!(2n)!
= ( 2 n ) ! n ! ( n − 1 ) ! n − ( 2 n ) ! n ! ( n − 1 ) ! ( n + 1 ) =\frac{(2n)!}{n!(n-1)!n}-\frac {(2n)!}{n!(n-1)!(n+1)} =n!(n1)!n(2n)!n!(n1)!(n+1)(2n)!
= ( 2 n ) ! n ! ( n − 1 ) ! ⋅ ( 1 n − 1 n + 1 ) =\frac{(2n)!}{n!(n-1)!}\cdot\left(\frac{1}{n}-\frac 1{n+1}\right) =n!(n1)!(2n)!(n1n+11)
= ( 2 n ) ! n ! ( n − 1 ) ! n − ( 2 n ) ! n ! ( n − 1 ) ! ( n + 1 ) =\frac{(2n)!}{n!(n-1)!n}-\frac {(2n)!}{n!(n-1)!(n+1)} =n!(n1)!n(2n)!n!(n1)!(n+1)(2n)!
= ( 2 n ) ! n ! ( n − 1 ) ! ⋅ ( 1 n − 1 n + 1 ) =\frac{(2n)!}{n!(n-1)!}\cdot\left(\frac{1}{n}-\frac 1{n+1}\right) =n!(n1)!(2n)!(n1n+11)
= ( 2 n ) ! n ! ( n − 1 ) ! ⋅ 1 n ( n + 1 ) =\frac{(2n)!}{n!(n-1)!}\cdot\frac {1}{n(n+1)} =n!(n1)!(2n)!n(n+1)1
= ( 2 n ) ! n ! n ! ⋅ 1 n + 1 =\frac{(2n)!}{n!n!}\cdot\frac {1}{n+1} =n!n!(2n)!n+11
= ( 2 n n ) ⋅ 1 n + 1 =\begin{pmatrix} 2n\\ n \end{pmatrix}\cdot\frac {1}{n+1} =(2nn)n+11

QED.

证明一下公式3:
留作习题,读者自证不难。

常见情况

特点:一种操作不能超过另一种操作,或操作之间不能有交集。

例如:

  1. 一个由 n n n 0 0 0 n n n 1 1 1组成的长度为 2 n 2n 2n的字符串,满足所有前缀中, 1 1 1的个数不能超过 0 0 0的个数,这样的子串数量。
  2. 包含 n n n组括号的合法表达式的数量。
    (想要括号序列合法,必须保证所有前缀中,左括号的数量大于等于右括号的数量)
  3. 一个栈的进栈序列为 1 , 2 , . . . , n 1,2,...,n 1,2,...,n,则出栈序列的可能数量。
    (必须保证出栈数量小于等于进栈数量)
  4. 在圆上选择 2 n 2n 2n个点,连接起来形成 n n n条不相交的弦的方案数。
    (把 n n n条不相交的弦映射为括号序列,把弦的左端映射为左括号,右端映射为右括号)
  5. 通过连接顶点将 n + 2 n+2 n+2条边的正多边形分为 n n n个三角形的方案数(三角剖分)。
    (想要保证分为 n n n个三角形,必须保证连接的线不相交)
  6. n n n个节点可以构造多少颗不同的二叉树?
    (考虑对 n + 2 n+2 n+2条边的多边形三角剖分,把剖分得出的三角形抽象为一个节点,对它相邻的三角形连边,最后得出必定是一颗二叉树。)
  7. 一段连乘积有多少种运算次序?
    (相当于给连乘积加括号)

公式法

事实上有:
H n = ∑ i = 0 n − 1 H i H n − i − 1 H_n=\overset{n-1}{\underset{i=0}\sum}H_iH_{n-i-1} Hn=i=0n1HiHni1

可以从两个方面来证明一下:

  • 出栈序列
    考虑 i i i是最后一个出栈的数,则 [ 1 , i − 1 ] [1,i-1] [1,i1] i i i进栈之前就出栈了,情况数有 H i − 1 H_{i-1} Hi1种,而 i i i后面的 n − i n-i ni个数,则必然在 i i i出栈前就出栈了,情况数有 H n − i H_{n-i} Hni种,枚举这个 i i i,得到
    H n = ∑ i = 1 n H i − 1 H n − i = ∑ i = 0 n − 1 H i H n − i − 1 H_n=\overset{n}{\underset{i=1}\sum}H_{i-1}H_{n-i}=\overset{n-1}{\underset{i=0}\sum}H_iH_{n-i-1} Hn=i=1nHi1Hni=i=0n1HiHni1
  • 格点计数
    我们知道,在格点卡特兰数的要求中,路径不能越过对角线。我们可知,在走到终点之前的一步,一定是向上走的:

    红色表示最后一步。

显然,碰到对角线之后,一定是向右走的,我们枚举对角线上的一个点,使得走完向右走的那一步之后,不能越过新的对角线,统计的路径条数:
在这里插入图片描述
绿色,枚举的位置。
红色,最后一步。
蓝色,新的对角线。

此时我们发现,从底下走到绿色圆圈,不能越过对角线。与从绿色箭头走到红色圆圈,不能越过蓝线,是两个更小的卡特兰数问题,因此可以用乘法原理计数。

我们注意到,我们枚举的一种新的情况,在我们枚举的更旧的情况中都属于不合法情况,不会被重复统计。

QED.

用公式同样可以解释各种卡特兰数的情况。

  1. 一个由 n n n 0 0 0 n n n 1 1 1组成的长度为 2 n 2n 2n的字符串,满足所有前缀中, 1 1 1的个数不能超过 0 0 0的个数,这样的子串数量。
    注意到最后一个字符一定是 1 1 1,枚举一个位置的 0 0 0,使得这个 0 0 0与末尾的那个 1 1 1匹配,转化为格点计数的情况。
  2. 包含 n n n组括号的合法表达式的数量。
    同理。
  3. 一个栈的进栈序列为 1 , 2 , . . . , n 1,2,...,n 1,2,...,n,则出栈序列的可能数量。
    同理。
  4. 在圆上选择 2 n 2n 2n个点,连接起来形成 n n n条不相交的弦的方案数。
    同理,枚举一个点与最后那个点(任意指定一个固定的点为最后的点)连接成弦。
  5. 通过连接顶点将 n + 2 n+2 n+2条边的正多边形分为 n n n个三角形的方案数(三角剖分)。
    同理4。
  6. n n n个节点可以构造多少颗不同的二叉树?
    枚举根节点有 i i i个左子树,则就会有 n − i − 1 n-i-1 ni1个右子树,显然。

斯特林数

第一类斯特林数

定义 [ n m ] \begin{bmatrix}n\\ m\end{bmatrix} [nm]表示 n n n元集合划分为 m m m个非空环排列的方案数,即无符号第一类斯特林数,或简称为第一类斯特林数,斯特林轮换数。

第一类斯特林数有递推式:
[ n m ] = [ n − 1 m − 1 ] + ( n − 1 ) [ n − 1 m ] \begin{bmatrix} n\\ m \end{bmatrix}=\begin{bmatrix} n-1\\ m-1 \end{bmatrix}+(n-1)\begin{bmatrix} n-1\\ m \end{bmatrix} [nm]=[n1m1]+(n1)[n1m]

递推式容易证明,留作习题。

第二类斯特林数

定义 { n m } \begin{Bmatrix} n\\ m \end{Bmatrix} {nm}表示将 n n n元集合划分为 m m m个非空子集的方案数,即第二类斯特林数,或斯特林子集数。

第二类斯特林数有递推式:
{ n m } = { n − 1 m − 1 } + m { n − 1 m } \begin{Bmatrix} n\\ m \end{Bmatrix}=\begin{Bmatrix} n-1\\ m-1 \end{Bmatrix}+m\begin{Bmatrix} n-1\\ m \end{Bmatrix} {nm}={n1m1}+m{n1m}

递推式容易证明,留作习题。

其他

  • 两类斯特林数的边界条件都是 s [ 0 ] [ 0 ] = 1 s[0][0]=1 s[0][0]=1
  • 从递推式可以看出,斯特林数增长比组合数还要快。
  • 斯特林数用于解决计数问题,以及用于斯特林反演。这些较复杂,单独讨论。

后记

于是皆大欢喜。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值