霍夫曼压缩

Huffman compression

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

所以我知道他们处理文本文件,但这是他们唯一处理的事情吗? 我可以使用 Huffman 压缩音频文件或图像吗?如果可以,我如何知道我将用于算法的 "blocks" 的大小?

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

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

请注意,虽然原则上您可以尝试使用 Huffman 压缩来压缩音频文件,但结果可能并不理想,因为 Huffman 依赖于某些符号比其他符号更频繁。专用压缩算法,如 MPEGx,通常用于音频。

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

Lempel-Ziv 是 建模 的一个示例,它采用在被压缩的特定类型数据(在本例中为文本)中发现的冗余,并将其转换为一系列适合 coding 的符号数。 Lempel-Ziv 假设文本中经常会重复各种长度的字符串,自然语言就是这种情况。

该假设对于音频或图像文件根本不起作用,其中冗余采用非常不同的形式。作为建模的一部分,对数据执行转换以按频率分离组件。对于人类使用的音频和图像数据,有损压缩也是可以接受的,其中数据可以根据其在频域中的位置进行抽取或丢弃,以及使用其他方式利用 psycho-acoustic 或psycho-visual有效冗余。

一旦完成了那种 建模 ,就可以应用类似的 coding 将生成的符号编码为最小大小的流位。

压缩包括建模,它高度依赖于要压缩的数据类型,以及有损压缩情况下的数据消费者,其次是编码,将结果信息压缩成压缩比特流。