Loading

题解 lg3978 [TJOI2015]概率论 生成函数

题意

为了提高智商,ZJY 开始学习概率论。有一天,她想到了这样一个问题:对于一棵随机生成的 n 个结点的有根二叉树(所有互相不同构的形态等概率出现),它的叶子节点数的期望是多少呢?

data range: \(n\le 1e9\)

思路

实际上我是找规律A的这道题

我们设 \(f(x)\) , \(g(x)\) 表示大小为 \(x\) 的所有不同构二叉树的个数和叶子节点个数和

先推 \(f(x)\) , \(f(x)=\sum_{i=0}^{n-1}f(i)f(n-i-1)\) ,边界条件 \(f(0)=1,f(1)=1\)

然后会发现这个是卡特兰数,通项公式 \(\frac{{2n \choose n}}{n+1}\)

再推\(g(x)\), 设 \(G(x)\) 为大小为 \(x\) 的二叉树的叶子节点个数的普通型生成函数,其中 \(a_ix^i\) 代表叶子节点为 \(i\) 的二叉树有 \(a_i\)

在草稿纸上用 \(G(x)\) ,来推一下 \(g(x)\)再放到OEIS上搜,发现是中心二项式系数,也即 \({2n-2\choose n-1}\)

多棒!

\(m=n-1\)

则答案为 \(\frac{g(x)}{f(x)}=\frac{(m+1)(m+2)}{2m+1}\)

但这样不够严谨,对吧

但是我也懒地写了

详细证法请见

较严谨 _rqy

用生成函数推的 Niko

后记

我还是推一下吧要不然对不起生成函数的标题

在推\(g(x)\)的时候我们可以发现,实际上就是枚举左右两边的子树大小,子树的贡献是 子树的叶子节点数 乘上 另外一边的方案数。由于左右对称,要再乘2,也即 \(g(x)=2\sum_{i=0}^{x-1}g(i)f(n-i-1)\)

再设 \(g\)\(f\) 的生成函数分别为 \(G(x)\) \(F(x)\) (注意,不要和上面那个我定义的\(G(x)\) 弄混)

易知 \(F(x)\) 的封闭形式为 \(\frac{1-\sqrt{1-4x}}{2x}\)

根据 \(g(x)\) 的推导式我们可得 \(G(x)=2xG(x)F(x)+x\) , 所以 \(G(x)=\frac{x}{\sqrt{1-4x}}\)

\((xF(x))^{'}=\frac{1}{\sqrt{1-4x}}=\frac{G(x)}{x}\)

对于第n项来说来说,也即\((xf(n)x^n)'=(n+1)f(n)x^n=\frac{g(n+1)x^{n+1}}{x}=g(n+1)x^{n}\)

所以\(g(n)=nf(n-1)={2n-2\choose n-1}\)

\(\frac{g(n)}{f(n)}=\frac{n(n+1)}{2(2n+1)}\)

posted @ 2021-02-05 10:25  fpjo  阅读(88)  评论(0编辑  收藏  举报