一个小证明

函数 $f \colon \mathbb{Z}_{> 0} \to \mathbb{R}$ 满足
$f(1) = 0$,
$f(n) = f(\ceil{n/2}) + 1$($n \ge 2$)。

试证明 $f(n) = \lceil \log_2 n \rceil$。

证明:对 $n$ 用归纳法。以下 $n > 1$。
若 $n$ 是偶数,则 $f(n) = f(n /2) + 1 = \lceil \log_2 n / 2 \rceil + 1 = \lceil (\log_2 n / 2) + 1\rceil = \lceil \log_2 n \rceil$。 若 $n$ 是奇数,则 $f(n) = f((n + 1) / 2) + 1 = \lceil \log_2 (n + 1) / 2 \rceil + 1 = \lceil (\log_2 (n + 1) / 2) + 1 \rceil = \lceil \log_2 (n + 1) \rceil$ 。我们要证明 $\lceil \log_2 (n + 1) \rceil = \lceil \log_2 n \rceil$。由 $n$ 是奇数且 $n > 1$ 知 $\log_2 n$ 不是整数,故有 $ \log_2 n < \lceil \log_2 n \rceil$。若 $\lceil \log_2 n \rceil < \log_2 (n + 1)$,则有 $ n < 2^{ \lceil \log_2 n \rceil} < n + 1 $。这与 $ 2^{ \lceil \log_2 n \rceil}$ 是整数相矛盾,所以必有 $\log_2 (n + 1) \le \lceil \log_2 n \rceil$,从而有 $\lceil\log_2 (n + 1)\rceil \le \lceil \log_2 n \rceil$,也就是 $\lceil\log_2 (n + 1)\rceil = \lceil \log_2 n \rceil$。

也可以从 $n$ 的二进制表示入手证明,不过不容易说清楚。

posted @ 2021-03-25 14:10  Pat  阅读(72)  评论(0编辑  收藏  举报