一个小证明

函数 $f colon mathbb{Z_{>0}} o mathbb{R}$ 满足
$f(1) = 0$,
$f(n) = f(n/2) + 1$,$n$ 是偶数;
$f(n) = f((n + 1) / 2) + 1$,$n$ 是奇数。

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

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

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

原文地址:https://www.cnblogs.com/Patt/p/14577227.html