代码之家  ›  专栏  ›  技术社区  ›  Philippe Ear

哈夫曼压缩[关闭]

  •  0
  • Philippe Ear  · 技术社区  · 6 年前

    我目前正在研究不同的压缩算法,如哈夫曼算法、自适应哈夫曼算法和Lempel-Ziv算法,但我真的不明白它应该如何处理随机文件。

    所以我知道他们在处理文本文件,但这是他们唯一在处理的吗? 我可以使用哈夫曼压缩音频文件或图像吗?如果可以,我如何知道我将用于算法的“块”的大小?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Mark Adler    6 年前

    哈夫曼和自适应哈夫曼是 编码 ,它利用符号概率的统计偏差将它们编码为尽可能少的位。(还有其他类型的编码,如算术、范围和非对称数字系统。)

    Lempel Ziv是 建模 ,它获取被压缩的特定类型数据(本例中为文本)中的冗余,并将其转换为一系列适合 编码 . Lempel Ziv的工作假设是,文本中经常会重复不同长度的字符串,自然语言就是这样。

    这种假设对于音频或图像文件根本不起作用,因为在这些文件中,冗余的形式非常不同。作为建模的一部分,将对数据执行转换,以按频率分离组件。此外,有损压缩对于人类消费的音频和图像数据都是可以接受的,其中数据可以根据其在频域中的位置进行抽取或丢弃,还可以使用其他方式利用心理声学或心理视觉有效冗余。

    一旦那样 建模 完成,然后类似 编码 可用于将结果符号编码为最小大小的比特流。

    压缩包括 建模 ,这在很大程度上取决于要压缩的数据类型,以及在有损压缩的情况下数据的使用者,然后是 编码 ,它将生成的信息压缩为压缩比特流。

        2
  •  0
  •   500 - Internal Server Error    6 年前

    是的,你提到的算法在二进制文件上都同样有效——大多数论文在示例中使用字符数据只是为了方便。

    至于块大小,虽然这不是一个要求,但现代通用压缩算法总是将输入视为字节流(8位值)。

    请注意,虽然原则上您可以尝试使用哈夫曼压缩来压缩音频文件,但结果可能是徒劳的,因为哈夫曼依赖于某些符号比其他符号更频繁。特殊用途的压缩算法,如MPEGx,通常用于音频。