• TJOI2015 概率论


    生成函数做法

    前置:卡特兰数

    (C_n)(n)个节点的二叉树的个数,(C_0=1),对于(n geq 1),取一个根节点,枚举其左子树大小,有

    [C_n=sum_{i=0}^{n-1}C_iC_{n-1-i} ]

    则卡特兰数的生成函数(C)满足

    [C(x)=C_0+xC^2(x)=1+xC^2(x),C_0=C(0)=1 ]

    解方程得

    [C(x)=frac{1-sqrt{1-4x}}{2x} ]

    上面为什么不取正呢?考虑x=0,取负上下为等阶无穷小,值为1;取正上面是2下面是0,无意义。所以只能取负。

    [C(x)=frac{1}{2x}left( 1- sum_{n=0}^{infty}inom{frac{1}{2}}{n} (-4x)^n ight)=-frac{1}{2}sum_{n=0}^{infty} inom{frac{1}{2}}{n+1}(-4)^{n+1}x^n ]

    [C_n=-frac{1}{2}inom{frac{1}{2}}{n+1}(-4)^{n+1}=2frac{prod_{i=0}^{n}(frac{1}{2}-i)}{(n+1)!}(-1)^n 2^{2n} ]

    [=frac{(2n-1)!!}{(n+1)!}2^n=frac{(2n)!}{n!n!(n+1)}=frac{1}{n+1}inom{2n}{n} ]

    分析

    (h_n)表示这(C_n)个二叉树的叶子数目之和,有(h_0=0,h_1=1)

    对于(ngeq 2),枚举根的左儿子大小并由对称性,有

    [h_n=2sum_{i=0}^{n-1}h_iC_{n-1-i} ]

    [h(x)-h_0-h_1x=2xh(x)C(x) ]

    [h(x)=2xh(x)C(x)+x ]

    根据(C(x)=frac{1-sqrt{1-4x}}{2x}),解得

    [h(x)=frac{x}{sqrt{1-4x}} ]

    [h(x)=xsum_{k=0}^{infty}inom{-frac{1}{2}}{k}(-4x)^k ]

    [h_n=inom{-frac{1}{2}}{n-1}(-1)^{n-1}2^{2(n-1)}=frac{prod_{i=0}^{n-2}(-frac{1}{2}-i)}{(n-1)!}(-1)^{n-1}2^{2(n-1)} ]

    [=frac{(2n-3)!!}{(n-1)!}2^{n-1}=frac{(2n-2)!}{(n-1)!(n-1)!}=inom{2n-2}{n-1} ]

    那么期望值为

    [frac{h_n}{C_n}=frac{n(n+1)}{2(2n-1)} ]

    组合做法

    对于一个叶子,可以用一个pair来描述:去掉该叶子后的二叉树,在该二叉树的哪个位置添加该叶子。

    每个pair也对应了唯一的叶子。所以考虑计数这个pair

    去掉该叶子的二叉树有N − 1个点,数目为CatalanN−1

    对于一个N − 1个点的二叉树,考虑有多少个空位可以放。总共有2 × (N − 1)个空位,但是有N − 2个点已经占据了一个空位,所以有N个空位可以添加叶子

    两个方案数相乘,再除以CatalanN,化简一下发现答案是 (frac{n(n+1)}{4n-2})

  • 相关阅读:
    使用Sed抽取MySQL安装文档的目录及行号
    [MySQL]关于Com_状态
    [译]理解对象存储如何工作
    [译]OpenStack Object Storage Monitoring
    通过设置swift中container的ACL提供匿名访问及用户授权读取服务
    使用swift命令遭遇503错误
    swift-get-nodes简单使用
    修改虚拟硬盘的大小
    php-fpm重启
    Windows学习"Network Analysis in Python"
  • 原文地址:https://www.cnblogs.com/autoint/p/9520580.html
Copyright © 2020-2023  润新知