题意

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

思路

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

​ 我们考虑设 \(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}\) 就行了,要什么代码??

TJOI 2015 概率论(生成函数)的更多相关文章

  1. 【bzoj4001】[TJOI2015]概率论 生成函数+导数

    题目描述 输入 输入一个正整数N,代表有根树的结点数 输出 输出这棵树期望的叶子节点数.要求误差小于1e-9 样例输入 1 样例输出 1.000000000 题解 生成函数+导数 先考虑节点个数为$n ...

  2. BZOJ 3998 [TJOI 2015] 弦论 解题报告

    这是一道后缀自动机经典题目. 对于 $t=0$ 的情况:每个节点都代表一个子串,所以我们给每个节点的 $Size$ 都记为 $1$, 对于 $t=1$ 的情况:我们只给 $last$ 节点的 $Siz ...

  3. BZOJ 3997 [TJOI 2015 组合数学] 解题报告

    这个题我脑洞了一个结论: 首先,我们定义满足以下条件的路径为“从右上到左下的路径”: 对于路径上任何不相同的两个点 $(x_1, y_1)$,$(x_2, y_2)$,都有: $x_1\neq x_2 ...

  4. BZOJ 3996 [TJOI 2015] 线性代数 解题报告

    首先,我们可以得到: $$D = \sum_{i=1}^{n}\sum_{j=1}^{n}a_i\times a_j\times b_{i,j} - \sum_{i=1}^{n}a_i\times c ...

  5. 解题:TJOI 2015 弦论

    题面 好像是个经典问题,然而我没做过 建SAM,然后经过每个节点的子串数目就可以求了,多个相同子串算一个的话就把所有siz都搞成$1$,否则就是$right$集合的大小,然后就是常见的递推 求第$k$ ...

  6. 解题:TJOI 2015 组合数学

    题面 通过这个题理解了一下反链的概念,更新在图论知识点里了 每个点向右和下连边可以建出一张图,这个题事实上是让我们求图的最小链覆盖.Dilworth定理告诉我们,最小链覆盖等于最长反链(反链:DAG中 ...

  7. 后缀自动机(SAM)奶妈式教程

    后缀自动机(SAM) 为了方便,我们做出如下约定: "后缀自动机" (Suffix Automaton) 在后文中简称为 SAM . 记 \(|S|\) 为字符串 \(S\) 的长 ...

  8. 【BZOJ4001】[TJOI2015]概率论(生成函数)

    [BZOJ4001][TJOI2015]概率论(生成函数) 题面 BZOJ 洛谷 题解 这题好仙啊.... 设\(g_n\)表示\(n\)个点的二叉树个数,\(f_n\)表示\(n\)个点的二叉树的叶 ...

  9. BZOJ4001 TJOI2015概率论(生成函数+卡特兰数)

    设f(n)为n个节点的二叉树个数,g(n)为n个节点的二叉树的叶子数量之和.则答案为g(n)/f(n). 显然f(n)为卡特兰数.有递推式f(n)=Σf(i)f(n-i-1) (i=0~n-1). 类 ...

随机推荐

  1. SQL Server 通过“with as”方法查询树型结构

    一.with as 公用表表达式 类似VIEW,但是不并没有创建对象,WITH  AS 公用表表达式不创建对象,只能被后随的SELECT语句,其作用: 1. 实现递归查询(树形结构) 2. 可以在一个 ...

  2. 记录一个 C# 导出 Excel 的坑

    Ø  简介 其实该文章并没有什么技术含量,只是记录下个人心得.在以后有朋友遇到类似问题,可以借鉴下,或者遇到相同问题时的提供个参考方向. 也算我的一个经历吧,这个问题我花了足足一天多的时间才找到问题, ...

  3. mysql参数之innodb_buffer_pool_size大小设置

    用于缓存索引和数据的内存大小,这个当然是越多越好, 数据读写在内存中非常快, 减少了对磁盘的读写. 当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中.然而内存还有操作系统或数据库其他进程使用 ...

  4. kali渗透综合靶机(十八)--FourAndSix2靶机

    kali渗透综合靶机(十八)--FourAndSix2靶机 靶机下载地址:https://download.vulnhub.com/fourandsix/FourAndSix2.ova 一.主机发现 ...

  5. WPF-带有GridView的ListView样式

    ListView是展示数据的常用控件,这里简单对带有GridView的ListView样式进行设置. <Style TargetType="{x:Type ListViewItem}& ...

  6. ASP.NET MVC EF 连接数据库(一)-----Database First

    database first (VS2015 ,Sql Server2014) 1,新建MVC项目 实例:   源码代码:http://note.youdao.com/noteshare?id=1fd ...

  7. Java编程基础——数组和二维数组

    Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...

  8. 前端开发HTML5——基础标签

    什么是HTML? HTML是HyperText Markup Language(超文本标记语言)的简写,他不是一种编程语言,而是一种标记语言,用于告诉浏览器如何构造你的页面.“超文本”就是指页面可以包 ...

  9. 【Qt编程】基于QWT的曲线绘制及图例显示操作——有样点的实现功能

    在<QWT在QtCreator中的安装与使用>一文中,我们完成了QWT的安装,这篇文章我们讲讲基础曲线的绘制功能. 首先,我们新建一个Qt应用程序,然后一路默认即可.这时,你会发现总共有: ...

  10. 前端技术扫盲-rem和px以及em关系

    首先rem,em和px都是长度单位,下面单独介绍各个单位的概念: px像素(Pixel).相对长度单位.像素px是相对于显示器屏幕分辨率而言的.PC端用比较多的. em是相对长度单位.相对于当前对象内 ...