Loading

TJOI 2015 概率论(生成函数)

题意

​ 求一棵随机生成的有根二叉树(节点无标号,各种不同构的情况随机出现)叶子结点个数的期望。

思路

​ 用生成函数做是个好题。

​ 我们考虑设 \(n\) 个节点,所有不同构二叉树叶子结点的总和为 \(f_n\) 。首先,\(n\) 个节点的无标号有根二叉树种类数为 \(C_n\) ,其中 \(C_n\) 表示卡特兰数。那么递推式比较显然

\[\begin{align*} f_n&=\sum_{i=0}^{n-1}f_{i}C_{n-1-i}+f_{n-1-i}C_i\\ &=2\sum_{i=0}^{n-1} f_iC_{n-1-i} \end{align*} \]

​ 特别的 \(f_0=0, f_1=1\) (求递推一定要考虑特殊情况,往往前面几项不满足递推)。

​ 我们设数列 \(\{f_n\}\) 的生成函数为 \(F(x)\) , 数列 \(\{C_n\}\) 的生成函数为 \(G(x)\)

​ 观察递推式,我们由卡特兰数递推的生成函数推导得到启发,可以将 \(F(x)\) 乘上 \(G(x)\)

\[\begin{align*} F(x)G(x)&=f_0C_0x^0+(f_0C_1+f_1C_0)x^1+(f_0C_2+f_1C_1+f_2C_0)x^2+\cdots\\ &=f_0C_0x^0+{f_2\over 2}x^1+{f_3\over 2}x^2+{f_4\over 2}x^3+\cdots\\ &={f_2x^1+f_3x^2+f_4x^3+\cdots\over2}\\ &={F(x)-(f_0x^0-f_1x^1)\over 2x}\\ &={F(x)-x\over 2x}\\ \end{align*} \]

​ 解得

\[F(x)={1\over 1-2xG(x)} \]

​ 而卡特兰数的生成函数 \(G(x)\) 等于 \(\displaystyle{1-(1-4x)^{1\over 2}\over 2x}\)

​ 代入得到

\[\begin{align*} F(x)&={x\over {\sqrt{1-4x}}}\\ &=x(1-4x)^{-{1\over 2}} \end{align*} \]

​ 进行广义二项式展开

\[\begin{align*} F(x)&=x\sum_{i=0}^{+\infty}{-{1\over 2}\choose i}(-4x)^i\\ &=x\sum_{i=0}^{+\infty}{(-{1\over 2})\times(-{3\over 2})\times\cdots\times(-{2i-1\over 2})\over i!}(-4x)^i\\ &=x\sum_{i=0}^{+\infty}{2^i\times1\times3\times\cdots\times(2i-1)\over i!}x^i\\ &=x\sum_{i=0}^{+\infty}{2^i\times{2i!\over 2^ii!}\over i!}x^i\\ &=x\sum_{i=0}^{+\infty}{2i!\over i! i!}x^i\\ &=\sum_{i=0}^{+\infty}{2i\choose i}x^{i+1}\\ &=\sum_{i=1}^{+\infty}{2i-2\choose i-1}x^i\\ \end{align*} \]

​ 于是我们得到了

\[f_n=\begin{cases} \displaystyle{2n-2\choose n-1}&n>0\\ 0&n=0 \end{cases} \]

​ 题目要求的,其实就是 \(\displaystyle{f_n\over C_n}\) ,即当 \(n=0\) 时,答案为 \(0\) ;否则答案为 \(\displaystyle{2n-2\choose n-1}\over \displaystyle{{1\over n+1}{2n\choose n}}\)

​ 简化一下,变成了 \(\displaystyle {n(n+1)\over 4n-2}\) ,这就是最终的答案。

代码

​ 输入 \(n\) ,输出 \(\displaystyle {n(n+1)\over 4n-2}\) 就行了,要什么代码??

posted @ 2019-10-14 10:33  Paulliant  阅读(374)  评论(1编辑  收藏  举报