有人告诉我霍夫曼编码被用作无损数据压缩算法,但我也被告知真正的数据压缩软件不使用霍夫曼编码,因为如果密钥分布不够分散,压缩文件可能比原始文件更大文件。
这让我想知道霍夫曼编码是否有任何实际应用?
有人告诉我霍夫曼编码被用作无损数据压缩算法,但我也被告知真正的数据压缩软件不使用霍夫曼编码,因为如果密钥分布不够分散,压缩文件可能比原始文件更大文件。
这让我想知道霍夫曼编码是否有任何实际应用?
请参阅有关该主题的维基百科文章:
今天的霍夫曼编码经常被用作其他压缩方法的“后端”。DEFLATE(PKZIP 的算法)和多媒体编解码器(如 JPEG 和 MP3)具有前端模型和量化,然后是 Huffman 编码。
霍夫曼编码有很多实际应用。ZIP 可能是使用最广泛的压缩工具,它使用 Huffman 编码作为其基础。谷歌上个月发布的最新最高效的无损压缩算法 Brotli Compression 也使用了 Huffman Coding。除此之外,Brotli 还使用 LZ77 和其他一些基本的无损压缩算法。请参阅布罗特利。
当考虑压缩算法时,每种算法通常都有优点和缺点。压缩的本质是给定一组输入,该数据存在更好和更差的压缩算法。
霍夫曼确实非常擅长某些事情。最值得注意的是重复顺序很多并包含字符空间子集的数据。例如英语文本文件。英语往往具有相同的字母,后跟相同的其他字母。
如果你的教授或书给你的印象是没有使用霍夫曼,那他们就错了。例如,几乎所有与互联网的通信和来自互联网的通信都在某些时候进行了霍夫曼编码。(许多通信协议都使用它。)大多数图像文件(jpeg)都是霍夫曼编码的。大多数音乐文件 (mp3) 都是霍夫曼编码的。还有很多其他的例子。
使用霍夫曼的一个原因是因为它可以通过一种称为自适应霍夫曼的稍微不同的算法来“发现”。当您阅读该文件时,您会了解 Huffman 代码并“随时压缩”。这是一个简化的概述,但你明白了。
为了解决使用最佳算法的情况问题,zip 文件允许使用多种不同的压缩方式,具体取决于给定文件的最佳压缩方式。
一个非常广泛的应用是 HPACK 中的字符串编码,这是http/2的标头压缩技术。
RFC 确实直接提供了一个针对压缩 HTTP 标头进行了优化的Huffman 代码表。
霍夫曼码用于将固定长度的代码转换为可变长度的代码,从而实现无损压缩。可变长度代码可以使用 JPEG 和 MPEG 技术进一步压缩以获得所需的压缩比。