代码之家  ›  专栏  ›  技术社区  ›  Mandrake

征求对霍夫曼压缩的意见

c
  •  1
  • Mandrake  · 技术社区  · 16 年前

    Huffman

    6 回复  |  直到 16 年前
        1
  •  7
  •   Mark Byers    16 年前

        2
  •  6
  •   Greg D    16 年前

    要解码哈夫曼编码的字节流,必须传输两条数据。编码流(当然)是必需的,但字典也是必需的,字典将允许您正确构建哈夫曼树以执行解码。

    因此,霍夫曼编码(就像几乎所有东西一样)是一种权衡。在编码文件的效率和字典的大小之间取得平衡可能很棘手。我从未根据数据特征进行过实际分析,以找出各种理想的令牌大小,但我认为倾向于使用字节,因为这是一个简单的分割点,通常会导致一些真正的压缩。我知道在大学时,我曾经用四字节令牌做过一次练习,但我不能诚实地说它比一字节令牌好。

    当然,也有可能作弊,而不是动态构建字典以获得真正贪婪的压缩,你可以使用预先构建的树并使用它进行压缩。然后,您将避免传输词典,但解码器也必须使用相同的词典来解码数据。

        3
  •  1
  •   Nils Pipenbrinck    16 年前

    附带说明:许多8位哈夫曼编解码器不仅压缩一个字节的256个自然符号。它们也有一个或多个特殊的符号。这些用于检测哈夫曼流的结束,或从一棵哈夫曼树切换到另一棵树。..

        4
  •  0
  •   Erich Kitzmueller    16 年前

    完全正确。无论如何,在实现压缩算法方面几乎没有什么用处(除了智力挑战或训练),因为几乎每种语言的标准库中都有压缩算法。

        5
  •  0
  •   Foo Bar    16 年前

    顺便说一句,霍夫曼编码总是与算术编码相同或更差。霍夫曼编码被使用了很多年,因为算术编码直到最近才获得专利,而且霍夫曼编码更容易实现。

        6
  •  -1
  •   Xolve    16 年前

    我这么说是因为我做了这件事。即使您大量优化符号表,这也适用。