想象一堂热闹的数学课。老师在黑板上写下“1~100”,心里悄悄想好一个数字,让同学们猜测。老师宣布规则:学生们只能问一个个是非题,例如“是不是大于50?”,看谁能用最少的问题猜出。全班化身侦探,问题此起彼伏:
“是不是大于50?”
“不是?那是不是大于25?”
“还是不是?那是不是大于12?”……
每个问题将候选集合分成两个分叉,因此可以借助二叉树来考虑这个问题。考虑候选集合 $\{1,2,\cdots,8\}$ 的中位数提问策略,根据回答拆分候选集合。将每个数字看作二叉树的一片叶子,数字 $i$ 的叶子深度 $d_i$ 就是它所经历的分叉(提问)次数,在满二叉树中所有 $d_i = 3$。
由于 $E(n)$ 表示平均提问次数,所以 $G(n) = n \cdot E(n)$ 可以看作是所有 $d_i$ 之和。
不难发现以下事实:
如若不然,在二叉树中同时存在一片最浅的叶(深度 $d_{\min}$)与一片最深的叶(深度 $d_{\max} \ge d_{\min} + 2$),我们做两步变换:
经过这两步操作,叶子数不变、叶深和严格下降。反复此操作,直到不再能进行为止;于是所有叶深只能落在 $m$ 与 $m+1$ 两层(否则还能继续下降)。这就得到:最优二叉树只有 $m$ 和 $m+1$ 两种深度。
例如图 2 是一个不平衡的二叉树,同时包含了偏浅的叶(深度为 2)和偏深的叶(深度为 4)。将浅叶裂叶,同时合并深叶,便得到了如图 1 所示的严格平衡树。
接下来讨论深度 $m$ 的叶和深度 $m+1$ 的叶的个数。
设深度 $m$ 的叶有 $x$ 个,深度 $m+1$ 的叶有 $y$ 个。显然总叶子数为 $n$:
同时看第 $m$ 层的结点:其总数必定是 $2^m$(为了让树尽可能满)。其中一部分是叶(计 $x$ 个),其余是内部结点;这些内部结点又会长出两片深度为 $m+1$ 的叶,所以:
联立式 (1) 和 (2) 解得:
叶深总和 $G(n)$ 可以表示为:
于是平均提问次数 $E(n) = \frac{G(n)}{n}$ 为: