表达式(通项公式):
Catalan(n)=1n+1(2nn)=(2n)!(n+1)! n!Catalan(n) = \frac{1}{n+1}\binom{2n}{n} = \frac{(2n)!}{(n+1)! \, n!}Catalan(n)=n+11(n2n)=(n+1)!n!(2n)!
Catalan数的经典应用如下:
- 序列 {1,2,3,······,n} 的栈混洗个数
- n 对括号所能组成的合法表达式数目(括号匹配)
- 迪克路径(从 (0,0)(0,0)(0,0) 到 (n,n)(n,n)(n,n),只能向右或向上走且不越过对角线 y=xy=xy=x的路径条数)
- ···········
推导:
递推法:
以求n个括号匹配问题 T(n)T(n)T(n) 为例,设有n对括号,其中任意一对合法的括号表达式 SnS_nSn 都可以唯一地分解成 Sn=(Sk)Sn−k−1S_n=(S_k)S_{n-k-1}Sn=(Sk)Sn−k−1 其中括号内外也均为合法表达式,那么此时 T(n)=T(k)∗T(n−k−1)T(n)=T(k)* T(n-k-1)T(n)=T(k)∗T(n−k−1) 对于每一个 kkk 的取值有 T(n)=∑k=0n−1T(k)∗T(n−k−1)T(n)=\sum_{k=0}^{n-1} T(k)* T(n-k-1)T(n)=k=0∑n−1T(k)∗T(n−k−1)又 T(0)=T(1)=1T(0)=T(1)=1T(0)=T(1)=1解出T(n)=Catalan(n)T(n)=Catalan(n)T(n)=Catalan(n)
反射原理法:
同样以 nnn 对括号的合法匹配问题为例,设所有由 nnn 个左括号和 nnn 个右括号组成的序列总数为:
总数=(2nn)
\text{总数} = \binom{2n}{n}
总数=(n2n)
这些序列中,有的在书写过程中会出现某一位置右括号数量多于左括号数量的情况,此类为不合法序列。
我们令 T(n)T(n)T(n) 表示合法序列的数量,则:
T(n)=总数−不合法数
T(n) = \text{总数} - \text{不合法数}
T(n)=总数−不合法数
不合法序列的计数:
假设我们把左括号视为“向上走一步 (↑)” ,右括号视为“向右走一步 (→)” ,那么每个括号序列可对应为一条从 (0,0)(0,0)(0,0) 到 (n,n)(n,n)(n,n) 的路径,且向上走的一定大于等于向右走的,即不从上方越过对角线。
对所有不合法路径,找到第一次越界点(即 y=x−1y=x-1y=x−1 的第一个点),
从该点开始,将后续部分关于这条直线镜像反射,可得到一条从 (0,0)(0,0)(0,0) 到 (n−1,n+1)(n-1,n+1)(n−1,n+1) 的路径。
这种反射是一一对应的,因此:
不合法路径数=(2nn+1)
\text{不合法路径数} = \binom{2n}{n+1}
不合法路径数=(n+12n)
因此:
T(n)=(2nn)−(2nn+1)
T(n) = \binom{2n}{n} - \binom{2n}{n+1}
T(n)=(n2n)−(n+12n)
化简得:
T(n)=1n+1(2nn)=Catalan(n)
T(n) = \frac{1}{n+1}\binom{2n}{n} = Catalan(n)
T(n)=n+11(n2n)=Catalan(n)
(由chatgpt5辅助整理)
637

被折叠的 条评论
为什么被折叠?



