随机生成一棵高 log n 的树

最广为人知的生成随机树的算法是对于每个节点随机选择其父亲。

形式地说:

  • 一个点的随机树只有一个形态;
  • 生成 \(n+1\) 个点的随机树时,先照此办法生成一个 \(n\) 个节点的随机树,然后从 \(n\) 个节点中均匀随机地选择一个节点作为第 \(n+1\) 个节点的父亲。

我们证明,这样生成的树的期望高度是 \(\Theta(\log n)\) 的。

\(f_i\) 表示第 \(i\) 个点的期望高度,显然有递推:

  • \(f_1=0\)
  • \(f_{n+1}=\dfrac{\sum_{i=1}^nf_i}{n}+1\)

\(S_n=\sum_{i=1}^nf_i\),考虑 \(S_n\) 的增长速度,显然有

\[S_{n+1}-S_n=\dfrac{S_n}{n}+1 \]

\[S_{n+1}=\dfrac{n+1}{n}S_n+1 \]

注意到

\[S_n=n\left(\sum_{i=2}^n\dfrac{1}{i}\right) \]

归纳易证。

显然 \(S_n=\Theta(n\log n)\),那么 \(f_n=\Theta(\log n)\)

// TODO

posted @ 2024-09-13 09:35  weilycoder  阅读(35)  评论(0编辑  收藏  举报