[TJOI2015] 概率論 - 組合數學
阿新 • • 發佈:2020-09-12
Description
求 \(n \le 10^9\) 個節點的二叉樹的葉子節點數期望。
Solution
設 \(f_i\) 表示 \(i\) 階二叉樹本質不同個數,\(g_i\) 表示所有本質不同 \(i\) 階二叉樹的樹葉個數的和,則有
\[f_i = \sum_{j=0}^{i-1} f_jf_{i-j-1}, \quad g_i=2\sum_{j=0}^{i-1} f_j g_{i-j-1} \]顯然 \(f_i\) 是卡特蘭數數列,有
\[f_n=\frac {C_{2n}^n} {n+1} =\frac {4n-2} {n+1} f_{n-1} \]然而 \(g_i\) 不好處理,下面我們證明 \(g_n=nf_{n-1}\)
對於 \(n\) 階二叉樹,設有 \(k\) 個葉子,分別刪去得到 \(k\) 棵 \(n-1\) 階二叉樹。而每個 \(n-1\) 階二叉樹有 \(n\) 個位置可以懸掛新的葉子,這種新增方式唯一對應了一種刪除操作,而刪除操作的總數就是所有葉子的個數總和。因此,葉子個數的總和為 \(nf_{n-1}\)。
於是有
\[\frac {g_n} {f_n} = \frac {nf_{n-1}} {f_n} =\frac {n(n+1)}{4n-2} \]#include <bits/stdc++.h> using namespace std; signed main() { double n; cin>>n; printf("%.10lf",n*(n+1)/(4*n-2)); }