Kraft不等式的证明
Kraft不等式定义如下:
任意D-进制码前缀码其码长 l 1 , l 2 , . . . , l n l_1,l_2,...,l_n l1,l2,...,ln,满足 ∑ i = 1 n D − l i ≤ 1 \sum_{i=1}^{n}D^{-l_i}\leq1 ∑i=1nD−li≤1
反之,如果码长约束满足上述不等式,则必然可以构造出具有此码长的前缀码。
必要性证明
我们依然从D叉树来考虑这个问题。假如码字最长为 l m a x l_{max} lmax。当一个结点被选做码字的时候,假设这个结点的深度为 l i l_i li,也就是码长为 l i l_i li。那么因为它的存在,它子树的结点都不能再次作为码字。因此我们就损失了 D l m a x − l i D^{l_{max} - l_i} Dlmax−li个叶子结点(注意,这里说的是叶子结点)。
这棵树的所有叶子结点数目为: D l m a x D^{l_{max}} Dlmax。我们最多把所有的叶子结点都给剪掉。
现在假设一共有m个码字,则:
∑ i = 1 m D l m a x − l i ≤ D l m a x \sum_{i=1}^{m}D^{l_{max} - l_i} \leq D^{l_{max}} ∑i=1mDlmax−li≤Dlmax
两侧同时除以 D l m a x D^{l_{max}} Dlmax,就得到了kraft不等式。
充分性证明
充分性更好证明。我们只要在树上就可以很容易构造出来这样的编码。
Kraft不等式给出了即时码的充要条件,但是和最优码长无关。