bzoj4001概率论 卡特兰数+生成函数+导数

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    double n;
    cin >> n;
    printf("%.9lf\n", n*(n+1)/2/(2*n-1));
    return 0;
}

题解:
首先节点为 n n n的二叉树个数, 卡特兰数 C i = ∑ j = 0 i − 1 C j ∗ C i − j − 1 C_i = \sum_{j = 0}^{i-1}{C_j*C_{i-j-1}} Ci=j=0i1CjCij1, 其个数便是 C n C_n Cn.
令其生成函数为F(x),由其递推式可以列出方程: F ( x ) = x F 2 ( x ) + 1 F(x)=xF^2(x)+1 F(x)=xF2(x)+1

F ( x ) = 1 − 1 − 4 x 2 x F(x)=\frac{1-\sqrt{1-4x}}{2x} F(x)=2x114x .
接下来算期望,假设节点为 i i i个的二叉树期望是 p i p_i pi,那么对于节点数为 n n n,左子树节点数为 l l l,右子树节点数为 r r r的树,总期望 * 总形态数 = ∑ \sum (左形态数 * 左期望 * 右形态 + 右形态数 *右期望 * 左形态数)
即为:
p i ∗ c i = ∑ j = 0 i − 1 ( c j ∗ c i − j − 1 ∗ ( p j + p i − j − 1 ) ) p_i * c_i = {\sum_{j = 0}^{i-1}{(c_j*c_{i-j-1}*(p_j+p_{i-j-1}))}} pici=j=0i1(cjcij1(pj+pij1))
我们设 t i = p i ∗ c i t_i = p_i * c_i ti=pici
那么有 t i = ∑ j = 0 i − 1 ( c i ∗ t i − j − 1 + t i ∗ c i − j − 1 ) = 2 ∑ j = 0 i − 1 c i ∗ t i − j − 1 t_i = \sum_{j=0}^{i-1}{(c_i*t_{i-j-1}+t_i*c_{i-j-1})} = 2\sum_{j=0}^{i-1}c_i*t_{i-j-1} ti=j=0i1(citij1+ticij1)=2j=0i1citij1

回想求卡特兰数列生成函数的递推方程的思维方式,由于卡特兰数列是多个项乘积的和,我们可以令生成函数相乘来相消:
F 2 ( x ) = ( c 0 + c 1 x + c 2 x 2 + . . . . . . ) ∗ ( c 0 + c 1 x + c 2 x 2 + . . . . . . ) F^2(x) = (c_0+c_1x+c_2x^2+...... ) *(c_0+c_1x+c_2x^2+...... ) F2(x)=(c0+c1x+c2x2+......)(c0+c1x+c2x2+......)
= c 0 c 0 + ( c 0 c 1 + c 1 c 0 ) x + ( c 0 c 2 + c 1 c 1 + c 2 c 0 ) x 2 + . . . . . . . =c_0c_0 + (c_0c_1+c_1c_0)x+(c_0c_2+c_1c_1+c_2c_0)x^2+....... =c0c0+(c0c1+c1c0)x+(c0c2+c1c1+c2c0)x2+.......
= c 1 + c 2 x + c 3 x 2 + . . . . . . . . =c_1+c_2x+c_3x^2+........ =c1+c2x+c3x2+........
= F ( x ) − c 0 x = F ( x ) − 1 x =\frac{F(x)-c_0}{x} = \frac{F(x)-1}x =xF(x)c0=xF(x)1
于是 F ( x ) = x F 2 ( x ) + 1 F(x)=xF^2(x)+1 F(x)=xF2(x)+1
我们类比,这次不是两个 c c c相乘而是 c ∗ t c*t ct, 设 t i t_i ti的生成函数是 G ( x ) G(x) G(x):
F ( x ) ∗ G ( x ) = ( c 0 + c 1 x + c 2 x 2 + . . . . ) ∗ ( t 0 + t 1 x + t 2 x 2 + . . . . ) F(x)*G(x)=(c_0+c_1x+c_2x^2+.... )*(t_0+t_1x+t_2x^2+....) F(x)G(x)=(c0+c1x+c2x2+....)(t0+t1x+t2x2+....)
= c 0 t 0 + ( c 0 t 1 + c 1 t 0 ) x + ( c 0 t 2 + c 1 t 1 + c 2 t 0 ) x 2 + . . . . . . = c_0t_0+(c_0t_1+c_1t_0)x + (c_0t_2+c_1t_1+c_2t_0)x^2+...... =c0t0+(c0t1+c1t0)x+(c0t2+c1t1+c2t0)x2+......

= t 1 + t 2 x + t 3 x 2 + . . . . 2 = \frac{t_1+t_2x+t_3x^2+....}2 =2t1+t2x+t3x2+....

= . . . . . . =...... =......
于是 G ( x ) = 2 x F ( x ) G ( x ) + x G(x)=2xF(x)G(x)+x G(x)=2xF(x)G(x)+x

G ( x ) = x 1 − 4 x G(x)=\frac{x} {\sqrt{1-4x}} G(x)=14x x

接下来开始玄学,注意到:

( x F ( x ) ) ′ = 1 1 − 4 x = G ( x ) x (xF(x))' = \frac{1}{\sqrt{1-4x}} = \frac{G(x)}x (xF(x))=14x 1=xG(x)

对两者之间有 c i x i + 1 c_ix^{i+1} cixi+1求导后 c i ( i + 1 ) x i c_i(i+1)x^i ci(i+1)xi, t i + 1 x i + 1 x = t i + 1 x i \frac{t_{i+1}x^{i+1}}x=t_{i+1}x^i xti+1xi+1=ti+1xi

说明 c i ( i + 1 ) = t i + 1 = c i + 1 p i + 1 c_i(i+1)=t_{i+1}=c_{i+1}p_{i+1} ci(i+1)=ti+1=ci+1pi+1,所以 p i = i ∗ c i − 1 c i p_i=\frac{i*c_{i-1}}{c_i} pi=ciici1

由卡特兰数公式 c i c i − 1 = 4 i − 2 i + 1 \frac{c_i}{c_{i-1}}=\frac{4i-2}{i+1} ci1ci=i+14i2

得到 p i = i ∗ ( i + 1 ) 4 ∗ i − 2 p_i=\frac{i*(i+1)}{4*i-2} pi=4i2i(i+1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值