Skip to content
0

卡特兰数 & 题解:P3830 [SHOI2012] 随机树

第一问简单不说了,设 fi 表示有 i 个叶子节点时的期望,直接转移即可。

有关第二问转移方程中 1i1 的证明,似乎没有看到卡特兰数方法的。

卡特兰数

Cn=1n+1(2nn)

公式一

通过拆式子,容易得到公式一:

Cn=(2nn)(2nn1)=(2nn)(2nn+1)

穿越对角线问题

这个问题解释了卡特兰数的组合意义。

考虑这样一个问题:在平面直角坐标系中,从 (0,0) 向上或向右走,走到 (n,n)不跨过直线 y=x,求方案数?

正难则反:用所有方案数减去跨过直线的方案数,可以得到从 (0,0)(n,n) 要走 2n 步,其中选择 n 步向上走,故所有方案数是 (2nn)

接着考虑跨过直线的,把第一次跨过直线后的路径沿 y=x+1 对折,显然最后会到达 (n+1,n1),对折前后的路径一一对应,方案数是 (2nn1)

image

0/1 序列问题

组合意义一,可以把向右走看作 0,向上走看作 1,那么问题等价于求一个 01 序列,包含 n0n1,且满足任意前缀 0 的数量不少于 1 的数量。那么这个问题的答案也是卡特兰数。

括号序列问题

求一个长度为 2n 的合法括号序列。一个右括号可以和前面出现过的一个左括号配对,因此这也是一个 0/1 序列问题,答案是卡特兰数。

公式二

Cn=i=0n1CiCni1,C0=1

这个公式可以由“二叉树问题”直观证明。

二叉树问题

n 个节点的二叉树有多少种方案数。

以下是 n=3 的情况,A 字头的是原树上的点,B 字头的是添加的点,令每个 A 字头的点都有两个儿子,除去根节点以外,新树共有 2n 个节点,并且一定有一半的节点是父亲的左子树,另一半是父亲的右子树,那么令位于左子树位置的是 (,右子树位置的是 ),先序遍历二叉树,显然有了左括号才能有右括号,转化为括号序列问题,这个问题的答案是 Cn

Fx 表示新树有 x叶子节点时的方案数,其中 F0=F1=1,显然这棵树有 (n+1) 个叶子节点,答案为 Fn+1

可以枚举在根节点的左子树放 i 个叶子节点,右子树放 (ni) 个叶子节点,则有

Fn=i=1n1FiFni

故有 C0=F1,Cn=Fn+1,递推公式证明完成。

image

回到本题

本题证明 1i1 的难点,在于不知道每种二叉树生成的概率是否相同,而题目生成的二叉树就相当于上面的“新树”,由卡特兰数即可得知随机生成新树恰好只有 Cn 种情况,每种情况互不相同,故概率时相同的。

最近更新