并查集:按秩合并 $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\)