题解 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}\)
但这样不够严谨,对吧
但是我也懒地写了
详细证法请见
后记
我还是推一下吧要不然对不起生成函数的标题
在推\(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)}\)