霍夫曼算法中的二进制前缀码

时间:2014-05-16 16:29:32

标签: algorithm binary-tree huffman-code clrs

在霍夫曼编码算法中,有一个引理说:

  

与最佳二进制前缀代码对应的二叉树已满

但我无法弄清楚原因。你怎么能证明这个引理?

2 个答案:

答案 0 :(得分:2)

数据的任何二进制代码都可以表示为二叉树。代码由从根到叶的路径表示,左边在前缀中表示0,右边表示1(反之亦然)。 请记住,对于每个符号,都有一个叶节点。

为了证明最佳代码将由完整的二叉树表示,让我们回想一下完整的二叉树是什么, 它是一棵树,每个节点都是叶子或有两个孩子。

假设某个代码是最优的并且由非完整树表示。 因此,存在一个只有一个子v的某个顶点.u和v之间的边将位x添加到以v为根的子树中的符号(在叶子处)的前缀代码中。 从这棵树我可以删除边x并用v替换u,从而减少以v为1的子树中所有符号的前缀代码的长度。这减少了至少一个符号表示中的位数(当v是单个节点时)。

这表明树实际上并没有代表最佳代码,而且我的前提是错误的。从而证明了引理。

答案 1 :(得分:1)

来自wikipedia

  

完整的二叉树(有时是2树或严格的二叉树)是一棵树,其中叶子以外的每个节点都有两个孩子。

生成霍夫曼代码树的方式肯定会产生完整的二叉树。因为在算法的每个步骤中,我们从队列中删除具有最高优先级(最低概率)的两个节点,并创建一个新的内部节点,将这两个节点作为子节点。