卡特兰数
考虑以下问题:
现在我们有 n + 1 n+1 n+1个数, x 0 , x 1 , x 2 , ⋯ , x n x_0,x_1,x_2,\cdots,x_n x0,x1,x2,⋯,xn,考虑它们的乘积 x 1 ⋅ x 2 ⋯ x n x_1\cdot x_2\cdots x_n x1⋅x2⋯xn,现在我们可以在其中插入括号来改变计算顺序。那么一共有多少种排列的顺序呢?比如说,现在有三个数 x 0 , x 1 , x 2 x_0, x_1, x_2 x0,x1,x2,它们的计算顺序有 ( x 0 x 1 ) x 2 (x_0x_1)x_2 (x0x1)x2以及 x 0 ( x 1 x 2 ) x_0(x_1x_2) x0(x1x2)两种排列方式
问题分析
我们可以使用递归的思想来考虑这个问题。我们把这
n
+
1
n+1
n+1个数分为两组,在第
k
k
k个数处分开,就形成了下面
A
,
B
A, B
A,B两组数。
(
x
0
x
1
x
2
⋯
x
k
)
⏟
A
,
(
x
k
+
1
⋯
x
n
−
1
x
n
)
⏟
B
\underbrace{(x_0\space x_1\space x_2 \cdots x_k)}_{A} ,\underbrace{(\space x_{k+1}\cdots x_{n-1}\space x_{n})}_{B}
A
(x0 x1 x2⋯xk),B
( xk+1⋯xn−1 xn)
我们记
n
+
1
n+1
n+1个数的插入括号后的计算顺序个数为
C
n
C_n
Cn,那么
A
A
A的计算顺序个数就是
C
k
C_k
Ck,
B
B
B的就是
C
n
−
k
−
1
C_{n-k-1}
Cn−k−1。所以说,如果说我们把最后一个括号放在第
k
k
k个数的地方,那么我们总的个数就是
C
k
C
n
−
k
−
1
C_kC_{n-k-1}
CkCn−k−1。这里
k
k
k可以从0到
n
−
1
n-1
n−1,根据加法原则,
C
n
=
∑
k
=
0
n
−
1
C
k
C
n
−
k
−
1
,
n
⩾
1
C_n=\sum^{n-1}_{k=0}C_kC_{n-k-1}, \space\space\space\space n\geqslant 1
Cn=k=0∑n−1CkCn−k−1, n⩾1
剩下的事情就是用数学方法计算出这个数列的通项公式。
数学解法
通过生成函数法(generating function)可以解出符合方法一中递推公式的数列的通项公式。
首先我们定义函数
f
(
x
)
=
∑
k
⩾
0
C
k
x
k
f(x)=\sum_{k\geqslant0}C_kx^k
f(x)=k⩾0∑Ckxk
然后我们可以将上面的递推公式推广到
n
⩾
0
n\geqslant0
n⩾0,也就是
C
n
=
∑
k
⩾
0
C
k
C
n
−
k
−
1
+
I
{
n
=
0
}
,
∀
n
⩾
0
C_n=\sum_{k\geqslant0}C_kC_{n-k-1}+\mathbb{I}_{\{n=0\}}, \space\space\space\space \forall n\geqslant0
Cn=k⩾0∑CkCn−k−1+I{n=0}, ∀n⩾0
其中
I
{
n
=
0
}
\mathbb{I}_{\{n=0\}}
I{n=0}是示意函数(indicator function),当
n
=
0
n=0
n=0时此函数值为1,否则值为0。并且我们定义当
k
<
0
k<0
k<0时,
C
k
=
0
C_k=0
Ck=0。等式两边同乘我们可以得到
f
(
x
)
=
∑
n
⩾
0
C
n
x
n
=
∑
n
⩾
0
C
k
C
n
−
k
−
1
x
n
+
I
{
n
=
0
}
x
n
=
∑
n
⩾
0
∑
k
⩾
0
C
k
C
n
−
k
−
1
x
k
x
n
−
k
+
1
=
∑
k
⩾
0
[
C
k
x
k
∑
n
⩾
0
C
n
−
k
−
1
x
n
−
k
−
1
⋅
x
]
+
1
\begin{aligned} f(x)& = \sum_{n\geqslant0}C_nx^n =\sum_{n\geqslant0}C_kC_{n-k-1}x^n+\mathbb{I}_{\{n=0\}}x^n \\ & = \sum_{n\geqslant0}\sum_{k\geqslant0}C_kC_{n-k-1}x^kx^{n-k}+1 \\ & = \sum_{k\geqslant0}\Big[C_kx^k\sum_{n\geqslant0}C_{n-k-1}x^{n-k-1}\cdot x\Big]+1 \\ \end{aligned}
f(x)=n⩾0∑Cnxn=n⩾0∑CkCn−k−1xn+I{n=0}xn=n⩾0∑k⩾0∑CkCn−k−1xkxn−k+1=k⩾0∑[Ckxkn⩾0∑Cn−k−1xn−k−1⋅x]+1
我们对
n
−
k
+
1
n-k+1
n−k+1进行一个换元之后,式子中的
∑
n
⩾
0
C
n
−
k
−
1
x
n
−
k
−
1
\sum_{n\geqslant0}C_{n-k-1}x^{n-k-1}
∑n⩾0Cn−k−1xn−k−1可以写成
∑
j
⩾
0
C
j
x
j
\sum_{j\geqslant0}Cjx^j
∑j⩾0Cjxj,也就是
f
(
x
)
f(x)
f(x),所以我们得到
f
(
x
)
=
∑
k
⩾
0
C
k
x
k
f
(
x
)
x
+
1
=
x
(
f
(
x
)
)
2
+
1
⟹
f
(
x
)
=
1
±
1
−
4
x
2
x
\begin{aligned} f(x)& =\sum_{k\geqslant0}C_kx^kf(x)x+1 \\ & =x\big(f(x)\big)^2+1 \\ \Longrightarrow f(x)& =\frac{1\pm\sqrt{1-4x}}{2x} \end{aligned}
f(x)⟹f(x)=k⩾0∑Ckxkf(x)x+1=x(f(x))2+1=2x1±1−4x
通过观察,由于
f
(
x
)
=
C
0
+
C
1
x
+
C
2
x
2
+
⋯
f(x)=C_0+C_1x+C_2x^2+\cdots
f(x)=C0+C1x+C2x2+⋯并且
f
(
0
)
=
C
0
=
1
f(0)=C_0=1
f(0)=C0=1,可以推断出这里我们需要取减号。接下来计算
(
1
−
4
x
)
1
2
(1-4x)^{\frac{1}{2}}
(1−4x)21
(
1
−
4
x
)
1
2
=
∑
k
⩾
0
(
1
2
k
)
(
−
4
x
)
k
∣
x
∣
<
1
4
=
1
+
∑
k
⩾
1
(
−
1
)
k
(
1
2
k
)
4
k
x
k
\begin{aligned} (1-4x)^{\frac{1}{2}} & =\sum_{k\geqslant0}\tbinom{\frac{1}{2}}{k}(-4x)^k \space\space\space\space |x|<\frac{1}{4}\\ & = 1+\sum_{k\geqslant1}(-1)^k\tbinom{\frac{1}{2}}{k}4^kx^k \end{aligned}
(1−4x)21=k⩾0∑(k21)(−4x)k ∣x∣<41=1+k⩾1∑(−1)k(k21)4kxk
通过广义二项式定理,我们可以进一步化简
(
1
2
k
)
=
1
2
(
1
2
−
1
)
⋯
(
1
2
−
k
+
1
)
k
!
=
1
2
k
⋅
(
−
1
2
)
(
−
3
2
)
⋯
(
−
1
2
−
(
k
−
1
)
+
1
)
(
k
−
1
)
!
=
1
2
k
⋅
(
−
1
2
)
k
−
1
⋅
1
⋅
3
⋯
(
2
k
−
3
)
(
k
−
1
)
!
=
1
2
k
⋅
(
−
1
2
)
k
−
1
⋅
1
⋅
2
⋅
3
⋅
4
⋯
(
2
k
−
3
)
⋅
(
2
k
−
2
)
2
k
−
1
(
k
−
1
)
!
(
k
−
1
)
!
=
1
2
k
⋅
(
−
1
4
)
k
−
1
⋅
(
2
k
−
2
k
−
1
)
\begin{aligned} \tbinom{\frac{1}{2}}{k}& =\frac{\frac{1}{2}(\frac{1}{2}-1)\cdots(\frac{1}{2}-k+1)}{k!} \\ & = \frac{1}{2k}\cdot\frac{(-\frac{1}{2})(-\frac{3}{2})\cdots(-\frac{1}{2}-(k-1)+1)}{(k-1)!} \\ & = \frac{1}{2k}\cdot(-\frac{1}{2})^{k-1}\cdot\frac{1\cdot3\cdots(2k-3)}{(k-1)!} \\ & = \frac{1}{2k}\cdot(-\frac{1}{2})^{k-1}\cdot\frac{1\cdot2\cdot3\cdot4\cdots(2k-3)\cdot(2k-2)}{2^{k-1}(k-1)!(k-1)!} \\ & =\frac{1}{2k}\cdot(-\frac{1}{4})^{k-1}\cdot\tbinom{2k-2}{k-1} \end{aligned}
(k21)=k!21(21−1)⋯(21−k+1)=2k1⋅(k−1)!(−21)(−23)⋯(−21−(k−1)+1)=2k1⋅(−21)k−1⋅(k−1)!1⋅3⋯(2k−3)=2k1⋅(−21)k−1⋅2k−1(k−1)!(k−1)!1⋅2⋅3⋅4⋯(2k−3)⋅(2k−2)=2k1⋅(−41)k−1⋅(k−12k−2)
代入上述式子可得
(
1
−
4
x
)
1
2
=
1
−
∑
k
⩾
1
1
2
k
(
2
k
−
2
k
−
1
)
⋅
4
⋅
x
k
=
1
−
2
x
∑
k
⩾
0
1
k
+
1
(
2
k
k
)
x
k
\begin{aligned} (1-4x)^{\frac{1}{2}}& =1-\sum_{k\geqslant1}\frac{1}{2k}\tbinom{2k-2}{k-1}\cdot4\cdot x^k \\ & =1-2x\sum_{k\geqslant0}\frac{1}{k+1}\tbinom{2k}{k}x^k \end{aligned}
(1−4x)21=1−k⩾1∑2k1(k−12k−2)⋅4⋅xk=1−2xk⩾0∑k+11(k2k)xk
最后把这个式子代回到
f
(
x
)
f(x)
f(x)的表达式中去,我们可以得到
f
(
x
)
=
∑
k
⩾
0
1
k
+
1
(
2
k
k
)
x
k
f(x)=\sum_{k\geqslant0}\frac{1}{k+1}\tbinom{2k}{k}x^k
f(x)=k⩾0∑k+11(k2k)xk
与
f
(
x
)
=
∑
k
⩾
0
C
k
x
k
f(x)=\sum_{k\geqslant0}C_kx^k
f(x)=∑k⩾0Ckxk进行对比我们可以得出结论
C
n
=
1
n
+
1
(
2
n
n
)
C_n=\frac{1}{n+1}\tbinom{2n}{n}
Cn=n+11(n2n)
这就是卡特兰数(Catalan Number)
卡特兰数的其他等价问题
-
Dyck word的个数. Dyck word表示一个有由 n n n个X和 n n n个Y组成的字符串,并且需要满足:在任意一个位置,之前的X个数都必须大于等于Y的个数。
这里可以给出一个卡特兰数简单的计算方法
首先不考虑限制条件,那么总共的排列方式有 ( 2 n n ) \tbinom{2n}{n} (n2n)种,然后考虑不满足题目限制的个数。假设在第 2 m + 1 2m+1 2m+1处有 m + 1 m+1 m+1个Y和 m m m个X(不满足题目要求),那么后面就有 n − m n-m n−m个X和 n − m − 1 n-m-1 n−m−1个Y,将这里的X全部替换为Y,Y全部替换为X,那么这样的字符串就变成了由 n − 1 n-1 n−1个X和 n + 1 n+1 n+1个Y组成的字符串。这样的字符串总数是 ( 2 n n + 1 ) \tbinom{2n}{n+1} (n+12n),所以总数是
( 2 n n ) − ( 2 n n + 1 ) = 1 n + 1 ( 2 n n ) \tbinom{2n}{n}-\tbinom{2n}{n+1}=\frac{1}{n+1}\tbinom{2n}{n} (n2n)−(n+12n)=n+11(n2n) -
包含n组括号的合法运算式的个数。
-
不相交的弦问题:在一个圆周上分布着 2 n 2n 2n个点,要求在每两个点之间连接一条弦,并 且弦与弦不能相交,求这样的连接方式个数。
-
格路问题:所有在 n × n n\times n n×n格点中不越过对角线的单调路径的个数。可以等价于计算Dyck word的个数(X代表“向右”,Y表示向右)