一个小证明

函数 \(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  阅读(73)  评论(0编辑  收藏  举报