题意
求一棵随机生成的有根二叉树(节点无标号,各种不同构的情况随机出现)叶子结点个数的期望。
思路
用生成函数做是个好题。
我们考虑设 (n) 个节点,所有不同构二叉树叶子结点的总和为 (f_n) 。首先,(n) 个节点的无标号有根二叉树种类数为 (C_n) ,其中 (C_n) 表示卡特兰数。那么递推式比较显然
[egin{align*}
f_n&=sum_{i=0}^{n-1}f_{i}C_{n-1-i}+f_{n-1-i}C_i\
&=2sum_{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)) 。
[egin{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_2over 2}x^1+{f_3over 2}x^2+{f_4over 2}x^3+cdots\
&={f_2x^1+f_3x^2+f_4x^3+cdotsover2}\
&={F(x)-(f_0x^0-f_1x^1)over 2x}\
&={F(x)-xover 2x}\
end{align*}
]
解得
[F(x)={1over 1-2xG(x)}
]
而卡特兰数的生成函数 (G(x)) 等于 (displaystyle{1-(1-4x)^{1over 2}over 2x})
代入得到
[egin{align*}
F(x)&={xover {sqrt{1-4x}}}\
&=x(1-4x)^{-{1over 2}}
end{align*}
]
进行广义二项式展开
[egin{align*}
F(x)&=xsum_{i=0}^{+infty}{-{1over 2}choose i}(-4x)^i\
&=xsum_{i=0}^{+infty}{(-{1over 2}) imes(-{3over 2}) imescdots imes(-{2i-1over 2})over i!}(-4x)^i\
&=xsum_{i=0}^{+infty}{2^i imes1 imes3 imescdots imes(2i-1)over i!}x^i\
&=xsum_{i=0}^{+infty}{2^i imes{2i!over 2^ii!}over i!}x^i\
&=xsum_{i=0}^{+infty}{2i!over i! i!}x^i\
&=sum_{i=0}^{+infty}{2ichoose i}x^{i+1}\
&=sum_{i=1}^{+infty}{2i-2choose i-1}x^i\
end{align*}
]
于是我们得到了
[f_n=egin{cases}
displaystyle{2n-2choose n-1}&n>0\
0&n=0
end{cases}
]
题目要求的,其实就是 (displaystyle{f_nover C_n}) ,即当 (n=0) 时,答案为 (0) ;否则答案为 (displaystyle{2n-2choose n-1}over displaystyle{{1over n+1}{2nchoose n}}) 。
简化一下,变成了 (displaystyle {n(n+1)over 4n-2}) ,这就是最终的答案。
代码
输入 (n) ,输出 (displaystyle {n(n+1)over 4n-2}) 就行了,要什么代码??