一棵随机生成的 \(n\) 个结点的有根二叉树(所有互相不同构的形态等概率出现)的叶子节点数的期望。\(n \leq 10^9\)
Solution
\(n\) 个点的二叉树个数即 Catalan 数 \(f(n)=\frac{C_{2n}^n}{n+1}\)
设 \(g(n)\) 为 \(n\) 个点的所有二叉树的叶子个数和,找规律得 \(g(n)=nf(n-1)\)
Proof. 对于 \(n\) 个点,\(k\) 个叶子的二叉树,删掉任意一个叶子可以得到 \(k\) 个 \(n-1\) 个点的二叉树,这些二叉树每个有 \(n\) 个位置可以挂一个新的叶子
所求为
\[
\frac{g_n}{f_n}=\frac{nf_{n-1}}{f_n}=\frac{n(n+1)}{2(2n-1)}
\]
#include <bits/stdc++.h>
using namespace std;
double n;
signed main() {
cin>>n;
printf("%.10lf\n",n*(n+1)/2/(2*n-1));
}
原文地址:https://www.cnblogs.com/mollnn/p/12363942.html
时间: 2024-10-08 20:13:32