当前位置: 首页 > news >正文

[TJOI2015] 概率论 题解

\(cnt_T\) 表示二叉树 \(T\) 的叶子节点个数,\(f_n\) 表示有 \(n\) 个节点的二叉树个数,于是有:

\[E(cnt_T)=\sum_{|V(T)|=n}cnt_T\frac1{f_n} \]

\(g_n=\sum_{|V(T)=n|}cnt_T\),答案为 \(\frac{g_n}{f_n}\)

\(f_n\),可以枚举左右子树的节点个数,有:

\[f_n=\sum_{i=1}^nf_{i-1}f_{n-i} \]

发现与卡特兰数的递推式相同。由卡特兰数通项公式得:

\[f_n=\frac{2n\choose n}{n-1} \]

考虑如何求 \(g_n\)。这里给出结论:\(g_n=nf_{n-1}\),证明如下:

对于每一棵有 \(n\) 个节点的二叉树 \(T\),由于去掉它的任何一个叶子节点都能让它变成一棵有 \(n-1\) 个节点的二叉树 \(T'\),因此,数每棵 \(T\) 有多少个叶子节点,可以转化为数每棵 \(T'\) 有多少个位置能添加节点。

这里证明一下关于二叉树的两条性质。

令叶子节点数为 \(V_0\),有一个儿子的节点数为 \(V_1\),有两个儿子的节点数为 \(V_2\)

  • 二叉树中,\(V_0=V_2+1\)

对于 \(1\) 个节点的树,这是显然的。

考虑向一棵二叉树上添加节点得到新树。

如果在 \(V_0\) 下添加节点,那么 \(V_0\)\(V_2\) 都不变;

如果在 \(V_1\) 下添加节点,那么 \(V_0\)\(V_2\)\(+1\)

因此 \(V_0\)\(V_2\) 的差始终为 \(1\)

  • 一棵有 \(n\) 个节点的二叉树,有 \(n+1\) 个位置能添加节点。

每个 \(V_0\) 下能添加两个节点,每个 \(V_1\) 下能添加一个节点,故共有 \(2V_0+V_1\) 个位置能添加节点。

由性质 \(1\) 可知,\(V_0=V_2+1\),又因为 \(V_0+V_1+V_2=n\),可解出 \(2V_0+V_1=n+1\)

因此有 \(n+1\) 个位置能添加节点。

由性质 \(2\) 即可推出,\(g_n=nf_{n-1}\)

\(f_n,g_n\) 代入前面的式子,推导后可得答案为:

\[\frac{n(n+1)}{2(2n+1)} \]

http://www.agseo.cn/news/75/

相关文章:

  • Linux进程与线程
  • 事半功倍是蠢蛋51 大上黑白屏反色
  • Linux 启动耗时优化 1s 内启动(RK3588 平台)
  • 周总结报告5
  • 使用模拟库进行测试的意义是什么?
  • MyEMS:开源领域的能源管理创新解决方案
  • 【Containerd交互命令】ctr、crictl常用基本命令
  • DAG Matters! GFlowNets Enhanced Explainer For Graph Neural Networks | |
  • abap字符串操作
  • [完结16章]COZE AI 智能体开发体系课(从入门到高级)零基础零代码
  • 推出其新一代高性能Sub-GHz射频收发芯片UM2011A
  • 在 Athena UDF 中使用 Java 将数据写入 DynamoDB
  • Pychram 激活
  • 掌控AI编程全链路:Cline让你随意选模型、透明成本、零信任安全 - 公众号
  • 数据库事务隔离级别引发的应用安全竞态条件漏洞分析
  • Node-Red学习笔记
  • 隧道工程LoRa无线监测设备集成方案 直击隧道深部监测痛点
  • 【k8s】为什么ctr导入后通过crictl查看不到导入的镜像
  • Swift 结合 Tesseract 进行验证码识别
  • 当虚拟机目录空间不足时的扩容
  • 使用IText创建PDF
  • MyEMS 深度解析:碳管理赋能与系统集成的实践路径
  • uv包管理 - 小学弟
  • 对口型视频创作指南:AI如何让“假唱”变成真艺术?
  • 用Python + Tesseract OCR:验证码识别全流程解析
  • Dockerfile中的yum install、yum clean和rm -rf /var/cache/yum
  • Linux 完整的用户登录工作流程详解(GUI TTY)
  • 0 元夺宝小程序介绍
  • 线上频繁FullGC?慌得一比!竟是Log4j2的这个“特性”坑了我
  • clickhouse进程stop之后为什么还自动启动