题目大意: 问一棵 n n n 个节点的二叉树的叶子结点数的期望。
题解
显然最后答案为 所有情况下叶子结点的总数
除以树的形态数
。
第二个部分就是卡特兰数,接下来求第一个部分。
设 f [ i ] f[i] f[i] 表示 i i i 个节点的树的所有形态下的叶子结点总数, g [ i ] g[i] g[i] 表示 i i i 个节点的树的形态数。
那么有(
i
i
i 是在枚举一个子树的大小):
f
[
n
]
=
∑
i
=
0
n
−
1
2
f
[
i
]
g
[
n
−
i
−
1
]
f[n]=\sum_{i=0}^{n-1}2f[i]g[n-i-1]
f[n]=i=0∑n−12f[i]g[n−i−1]
乘 2 2 2 是因为这个大小为 i i i 的子树可以是左子树也可以是右子树。
发现这个有点像卷积的形式,他们的下标相加为 n − 1 n-1 n−1,是个定值,那么考虑生成函数。
设
F
(
x
)
=
∑
i
=
0
f
[
i
]
x
i
,
G
(
x
)
=
∑
i
=
0
g
[
i
]
x
i
F(x)=\sum\limits_{i=0} f[i]x^i,G(x)=\sum\limits_{i=0}g[i]x^i
F(x)=i=0∑f[i]xi,G(x)=i=0∑g[i]xi,那么有:
F
=
2
F
G
x
F=2FGx
F=2FGx
但是我们发现,
f
[
1
]
=
2
f
[
0
]
g
[
0
]
f[1]=2f[0]g[0]
f[1]=2f[0]g[0],而
f
[
0
]
=
g
[
0
]
=
0
f[0]=g[0]=0
f[0]=g[0]=0,这并不能求出
f
[
1
]
=
1
f[1]=1
f[1]=1 这个正确的结果,所以我们还需要给
F
F
F 补上
f
[
1
]
f[1]
f[1] 所在的那一项,即:
F
=
2
F
G
x
+
x
F=2FGx+x
F=2FGx+x
因为 g [ i ] g[i] g[i] 是卡特兰数,于是我们知道 G = 1 − 1 − 4 x 2 x G=\frac {1-\sqrt {1-4x}} {2x} G=2x1−1−4x(不明白的请看这里)。
带进去算一波,可以得到 F = x 1 − 4 x F=\frac x {\sqrt{1-4x}} F=1−4xx
我们不妨将分子部分的 x x x 给除掉,那么相当于将 F F F 的系数整体左移了一位,我们原先要求 F F F 的第 n n n 位的系数,现在变成求 n − 1 n-1 n−1 位的系数。
因为
1
1
−
4
x
=
(
1
−
4
x
)
−
1
2
\frac 1 {\sqrt {1-4x}}=(1-4x)^{-\frac 1 2}
1−4x1=(1−4x)−21,不妨用广义二项式定理搞他一波:
[
x
n
−
1
]
(
1
−
4
x
)
−
1
2
=
(
−
1
2
n
−
1
)
(
−
4
)
n
−
1
=
(
−
1
2
)
(
−
1
2
−
1
)
.
.
.
(
−
1
2
−
(
n
−
1
)
+
1
)
(
n
−
1
)
!
(
−
4
)
n
−
1
=
(
−
1
2
)
(
−
3
2
)
.
.
.
(
−
1
+
2
n
−
4
2
)
(
n
−
1
)
!
(
−
1
)
n
−
1
4
n
−
1
=
(
−
1
)
n
−
1
∏
i
=
1
n
−
1
(
2
i
−
1
)
(
n
−
1
)
!
2
n
−
1
(
−
1
)
n
−
1
4
n
−
1
=
(
2
n
−
3
)
!
(
n
−
1
)
!
2
n
−
1
∏
i
=
2
n
−
1
(
2
i
−
2
)
4
n
−
1
=
(
2
n
−
3
)
!
(
n
−
1
)
!
2
n
−
1
×
2
n
−
2
(
n
−
2
)
!
4
n
−
1
=
2
(
2
n
−
3
)
!
(
n
−
1
)
!
(
n
−
2
)
!
\begin{aligned} [x^{n-1}](1-4x)^{-\frac 1 2}&={{-\frac 1 2}\choose{n-1}}(-4)^{n-1}\\ &=\frac {(-\frac 1 2)(-\frac 1 2 -1)...(-\frac 1 2-(n-1)+1)} {(n-1)!}(-4)^{n-1}\\ &=\frac {(-\frac 1 2)(-\frac 3 2)...(-\frac {1+2n-4} 2)} {(n-1)!}(-1)^{n-1}4^{n-1}\\ &=\frac {(-1)^{n-1}\prod_{i=1}^{n-1}(2i-1)} {(n-1)!2^{n-1}}(-1)^{n-1}4^{n-1}\\ &=\frac {(2n-3)!} {(n-1)!2^{n-1}\prod_{i=2}^{n-1}(2i-2)}4^{n-1}\\ &=\frac {(2n-3)!} {(n-1)!2^{n-1} \times 2^{n-2}(n-2)!}4^{n-1}\\ &=\frac {2(2n-3)!} {(n-1)!(n-2)!} \end{aligned}
[xn−1](1−4x)−21=(n−1−21)(−4)n−1=(n−1)!(−21)(−21−1)...(−21−(n−1)+1)(−4)n−1=(n−1)!(−21)(−23)...(−21+2n−4)(−1)n−14n−1=(n−1)!2n−1(−1)n−1∏i=1n−1(2i−1)(−1)n−14n−1=(n−1)!2n−1∏i=2n−1(2i−2)(2n−3)!4n−1=(n−1)!2n−1×2n−2(n−2)!(2n−3)!4n−1=(n−1)!(n−2)!2(2n−3)!
最后的答案是:
[
x
n
]
F
(
x
)
g
[
n
]
=
2
(
2
n
−
3
)
!
(
n
−
1
)
!
(
n
−
2
)
!
(
2
n
)
!
n
!
(
n
+
1
)
!
=
2
(
2
n
−
3
)
!
(
n
−
1
)
!
(
n
−
2
)
!
×
n
!
(
n
+
1
)
!
(
2
n
)
!
=
2
n
(
n
−
1
)
(
n
+
1
)
n
2
n
(
2
n
−
1
)
(
2
n
−
2
)
=
(
n
+
1
)
n
2
(
2
n
−
1
)
\begin{aligned} \frac {[x^n]F(x)} {g[n]}&=\frac {\frac {2(2n-3)!} {(n-1)!(n-2)!}} {\frac {(2n)!} {n!(n+1)!}}\\ &=\frac {2(2n-3)!} {(n-1)!(n-2)!} \times\frac {n!(n+1)!} {(2n)!}\\ &=\frac {2n(n-1)(n+1)n} {2n(2n-1)(2n-2)}\\ &=\frac {(n+1)n} {2(2n-1)} \end{aligned}
g[n][xn]F(x)=n!(n+1)!(2n)!(n−1)!(n−2)!2(2n−3)!=(n−1)!(n−2)!2(2n−3)!×(2n)!n!(n+1)!=2n(2n−1)(2n−2)2n(n−1)(n+1)n=2(2n−1)(n+1)n
代码都差不多可以不看了233:
#include <cstdio>
double n;
int main()
{
scanf("%lf",&n);
printf("%.9lf",(n+1.0)*n/2.0/(2.0*n-1.0));
}