【7】Catalan 数学习笔记
引入
下面摘抄自 OI Wiki:
Catalan 数经常出现在各类计数问题中。比利时数学家 Eugène Charles Catalan 在 1958 年研究括号序列计数问题时发现了这一数列,它也因此得名。清朝数学家明安图早在 18 世纪 30 年代就已经发现这一数列。
公式
记
证明这些式子等价可以看 OI Wiki。
注意
(若在做题时跑小数据暴力发现答案与这个数列有重合,可以考虑 Catalan 数。)
应用
那么 Catalan 数有什么实际意义呢?下面来举几个例子:
-
路径计数问题:给定一个网格图,你要从左下角
(0,0) 走到右上角(n,n) ,且你的路径不能穿过对角线y=x 。求你的可行路径数。下面我们证明答案就是C_n 。- 这个问题实际上和如下问题等价:
:::info[等价描述]{open} 求有多少个长度为
2n ,包含恰好n 个0 和n 个1 的01 串,满足对于该串的任意前缀,都有1 的数量不少于0 的数量。 :::我们只需要考虑该等价问题即可。直接计算不太好算,我们考虑正难则反,总方案数显然是
\binom{2n}{n} ,我们算出不合法的串串数,用总方案减掉即可。记
p_i 为前i 位中1 的数量减去0 的数量。如果该串不合法,那么一定存在一个地方使得p_i=-1 ,此时0 的数量比1 多1 个。那么我们找到第一个出现p_i=-1 的位置,假设为2q+1 ,那么也就是p_{2q+1}=-1 。那么也就是说,前2q+1 位中包含q 个1 和q+1 个0 。那么可以得出,后面剩下的位中包含n-q 个1 和n-q-1 个0 。现在我们将前
2q+1 位翻转,也就是0 \to 1, 1 \to 0 。翻转之后我们得到了一个新串,其中包含的1 的个数恰好为n-q+q+1=n+1 个!又由于我们选取的是最前面的一个位置,所以这些新串和原来不合法的串就一一对应,因此不合法串的个数就是\binom{2n}{n+1} 。综上,合法字符串的方案数即为
\binom{2n}n-\binom{2n}{n+1} ,这正是 Catalan 数。 -
括号序列计数问题:计算长度为
2n 的合法括号串数量。- 记答案为
A_n ,尝试递推。
不难发现第一个字符一定是左括号,我们考虑枚举与其匹配的右括号在哪里。假设其位置为
2k\ (1 \le k \le n) ,那么2 \sim 2k-1 位其实也构成了一个长度为2k-2 的合法括号串,而这个长度的括号串方案数为A_{k-1} ;同理,2k+1 \sim 2n 也构成了一个长度为2n-2k 的括号串,方案数为A_{n-k} 。根据乘法原理,答案就是A_n=\sum_{k=1}^nA_{k-1}A_{n-k}=\sum_{k=0}^{n-1}A_kA_{n-1-k} 这正是 Catalan 数的递推公式。因此答案为
C_n 。 - 记答案为
-
二叉树计数问题:求包含
n 个点的不同二叉树数量。- 考虑随便选一个根节点,假设左子树的大小为
k ,那么右子树的大小就是n-1-k 。因此,如果设答案为A_n ,那么就有
A_n=\sum_{k=0}^{n-1}A_kA_{n-1-k} 这就是 Catalan 数的公式。
- 考虑随便选一个根节点,假设左子树的大小为
例题
P1641 [SCOI2010] 生成字符串
题目自己看,题意很简洁,这里不重复了。
这题其实和我们前面讲的路径计数问题很像,我们考虑在哪里修改一下……
在选出前
时间复杂度
P3200 [HNOI2009] 有趣的数列
题意很简洁,不说了。
直接思考没啥头绪,我们考虑从
用
这个串有什么条件?这是本题最关键的一点:该串所有前缀
如何证明?考虑反证,如果存在一个前缀
既然如此,那么答案也就是
P2532 [AHOI2012] 树屋阶梯
首先可以发现,既然这个阶梯的高为
那么我们考虑枚举覆盖
-
上方高为
i-1 的阶梯; -
右边高为
n-i 的阶梯。
记高为
这正是 Catalan 数的递推式。因此答案为
本题需要使用高精度。所以我没写。
P3978 [TJOI2015] 概率论
期望题一般就是要么概率 DP 要么转成总数除以总方案数?这题看着后者就比较可做(?
我们记
对于一个
我们随便拿一棵包含
然后还有另外一个等式:
那么在这样的树上插入叶子有多少种方案呢?(注意,这里把一个叶子插入到一个点的左儿子和右儿子是不同的。)不难发现,就是
我们得到了一个常数!因此,一个包含
那么带回到原问题中,就可以得到:
因此最终的答案就是
总结 & 后记
Catalan 数在组合数学题中比较常见,建议可以背一下前几项。这也启示我们,做这种数学题没思路的时候,可以试试先暴力跑一下小数据,看答案有没有什么规律。
码字不易,能否给个赞 /wq ><
若对文章有任何问题和建议可以与作者私信交流。