并查集:按秩合并 $n$ 个点所得树高不超过 $\lfloor\log n \rfloor$

用 $h_n$ 表示按秩合并 $n$ 个点所得树的最大高度。
有 $h_1 = 0, h_2 = 1, h_3 = 1, h_4 = 2, h_5 = 2, \dots$
有如下地推:
\[ h_n = \max_{1\le i\le n-1} \max(h_i, h_{n-i}) + [h_i = h_{n-i} ]\]
因此有
$h_{n+1} \ge h_n$
$h_{2n} \ge h_n + 1$

可以证明 $h_n = \lfloor \log n\rfloor$

对 $n$ 用数学归纳法。

\begin{aligned}
h_n &= \max_{1\le i \le n/2} h_{n-i} + [h_i = h_{n-i}] \\
&= \max_{1\le i \le n/2} \lfloor \log (n-i) \rfloor + [\lfloor\log i \rfloor = \lfloor \log(n-i)\rfloor]
\end{aligned}

设 $n = 2^k + i$,其中 $0\le i < 2^k$

$ \lfloor\log i \rfloor = \lfloor \log(n-i)\rfloor \implies \lfloor\log i \rfloor = \lfloor \log(n-i)\rfloor = k-1$

故 $h_n = \max(k, h_{n-1}) = k = \lfloor \log n\rfloor$

转载于:https://www.cnblogs.com/Patt/p/10028958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值