霍夫曼编码无损压缩

时间:2011-04-15 11:57:40

标签: lossless-compression huffman-code

我真的需要帮助Huffman Coding进行无损压缩。我的考试即将开始,需要了解这一点,有没有人知道为理解这一点而做的简单教程,或者有人可以解释。

考试中的问题可能是:

假设字母表是[A,B,C],并且已知的概率分布是P(A)= 0.6, P(B)= 0.2,P(C)= 0.2。为简单起见,我们还假设编码器和解码器都知道 消息的长度始终为3,因此不需要终结符。

  1. 通过霍夫曼编码对消息ACB进行编码需要多少位?你需要 为每个符号提供霍夫曼树和霍夫曼代码。 (3分)

  2. 算术编码对消息ACB进行编码需要多少位?你需要 提供编码过程的详细信息。 (3分)

  3. 使用上述结果,讨论算术编码优于霍夫曼编码的优点。 (1分)

  4. 数目:

    1. 霍夫曼代码:A - 1,B - 01,C - 00。 编码结果为10001,因此需要5位。 (3分)

    2. 算术编码的编码过程: 符号低范围 0.0 1.0 1.0 A 0.0 0.6 0.6 C 0.48 0.6 0.12 B 0.552 0.576 0.024 最终的二进制码字是0.1001,即0.5625。因此需要4位。 (3分)

    3. 在霍夫曼编码中,每个符号的码字长度必须是整数。但它 在算术编码中可以是小数。因此,算术编码通常更有效 比霍夫曼编码,如上所示的结果。 (1分)

3 个答案:

答案 0 :(得分:2)

http://en.wikipedia.org/wiki/Huffman_coding

如果你看树(右上角),你会看到每个父节点都是它下面的两个父节点的总和。节点处的值是字母的频率。二进制序列中的每个位都是树中的右/左分支。

这有帮助吗?

我对Arithmetic coding并不十分了解,但看起来很聪明。

答案 1 :(得分:1)

霍夫曼树是一个二叉树,其中节点表示流中最高分布的值被压缩在根附近,而分布越来越远的值越远离根,因此允许编码更常见的值在较短的字符串中,较不常见的值在较长的字符串中编码。

霍夫曼树构造如下:

  1. 在源流中构建实体表及其分发。
  2. 选择表格中分布最低的两个条目。
  3. 从这两个条目中创建一个树节点。
  4. 删除表中刚刚使用的条目。
  5. 向表中添加一个新条目,其中包含刚刚删除的节点以及树节点的组合分布。
  6. 如果表格中还有多个条目,请转到步骤2.
  7. 表格中留下的条目是您的根。

答案 2 :(得分:0)

基本的霍夫曼实施可以很好。但是,如果您从头开始构建,则可能需要在工具箱中使用多个其他数据结构来简化操作,例如minHeap和位向量。编码和解码的基本算法非常简单。没有关于与算术编码比较的信息。

An implementation example