\(\newcommand{\HH}{\operatorname{H}}\)
我们熟知一些说法, 比如一个二叉树如果第 \(i\) 个节点的访问次数是 \(w_i\), 那么最优的建树会使得总共访问节点次数是
\[O\left(\sum w_i \log \frac{W}{w_i}\right ) \]量级的, 其中 \(W = \sum w_i\).
那么这个说法到底有多精确呢? 我们不妨考虑最常考虑的 Huffman 树问题, 也不妨把次数转化成频率, 设一个节点被访问的频率是 \(p_i\), 也即 \(\sum p_i = 1\), 那么我们希望一次随机访问期望深度是
\[O\left( \sum p_i \log \frac 1{p_i} \right), \]这正是信息熵的式子, 写作 \(\HH (p) = \sum p\log(1/p)\).
下界
我们首先证明任何树, 随机访问的深度都至少是 \(\HH_2(p)\).
当合并两个频率分别为 \(x, y\) 的子树时, 我们会支付 \(x+y\) 的代价, 而注意到
\[ \begin{align*} &\quad (x+y)\log_2(x+y) - x\log_2 x - y\log_2 y\\ &= x\log_2 \left(1 + \frac y x \right) + y\log_2 \left(1 + \frac x y\right)\\ &= x\left[\log_2 \left(1 + \frac y x \right) + \frac y x\log_2 \left(1 + \frac x y\right)\right]\\ &\leq x \left[1 + \frac y x\right]\\ &= x + y, \end{align*} \]我们利用这个裂项, 可以得到期望深度的下界.
上界
为了证明上界, 最好的方法就是直接构造一个.
Kraft 不等式. 如果对于一些非负整数 \(\ell_i\),
\[\sum 2^{-\ell_i} = 1, \]当且仅当存在一个二叉树, 所有叶子节点构成深度的多重集是 \(\ell_i\).
证明. 留作习题. \(\square\)
上面这个不等式看起来很简单, 但有了它之后, 事情就简单很多了.
我们设 \(\ell_i = \lceil \log_2 (1/p_i)\rceil\), 这个时候就有
\[\sum 2^{-\ell_i} \leq \sum 2^{-\log_2(1/p_i)} = \sum p_i = 1, \]所以我们稍微调整一下, 把一些 \(\ell_i\) 变小, 使得总和为 \(1\), 此时有 \(\ell_i' \leq \lceil \log_2 (1/p_i)\rceil\), 且根据 Kraft 不等式, 存在这么一颗二叉树实现它.
这个时候, 我们有期望深度
\[= \sum p_i \ell'_i \leq \sum p_i(\log_2 (1/p_i) + 1) = \HH_2(p) + 1. \]综上, 我们有期望深度一定在 \(\HH_2(p)\) 到 \(\HH_2(p) + 1\) 之间.
标签:编码,right,frac,log,ell,sum,估计,Huffman,left From: https://www.cnblogs.com/Elegia/p/estimate-of-huffman-coding.html