2

目前,我正在开发一个需要在 iPad 上存储大量文本的应用程序。我的问题是,像霍夫曼编码这样的算法是否真的用于生产?我只需要一个非常简单的压缩算法(不会有大量的文本,它只需要一种更有效的存储方法),那么像 Huffamn 这样的算法行得通吗?我应该看看其他类型的压缩库吗?

4

7 回答 7

12

来自维基百科的主题

今天的霍夫曼编码经常被用作其他一些压缩方法的“后端”。DEFLATE(PKZIP 算法)和 JPEG 和 MP3 等多媒体编解码器具有前端模型和量化,然后是 Huffman 编码(或具有类似结构的可变长度无前缀代码,尽管可能不一定使用 Huffman 算法设计)。

所以是的,霍夫曼编码用于生产。相当多,甚至。

于 2011-07-26T19:05:39.257 回答
3

霍夫曼编码(也称为熵编码)应用非常广泛。任何你想象的被压缩的东西,除了一些非常古老的方案外,都会使用它们。图像压缩、Zip 和 RAR 档案、每一种可以想象的编解码器等等。

请记住,霍夫曼编码是无损的,并且需要您提前知道要压缩的所有数据。如果您正在进行有损压缩,则需要先对数据执行一些转换以降低其熵(在 JPEG 压缩中去除和量化 DCT 系数)。如果您希望 Huffnam 编码处理实时数据(您并不事先了解每一位),则使用自适应 Huffman 编码。您可以在信号处理文献中找到有关此主题的大量信息。

一些预霍夫曼压缩包括行程编码(传真机)等方案。游程编码有时仍与霍夫曼编码结合使用(同样是JPEG)。

于 2011-07-26T19:09:32.140 回答
3

是的,它们用于生产。

正如其他人所提到的,真正的 Huffman 要求您首先分析整个语料库以获得最有效的编码,因此通常不会单独使用它。

可能在你出生后不久,我在 Psion Series 3 掌上电脑上用 C 语言实现了 Huffman 压缩,以便压缩预加载到数据包中且仅在掌上电脑上解压缩的数据。那时候空间很紧,没有内置压缩库。

像大多数规范明确的软件一样,我强烈考虑使用 iOS 内置的任何功能或开发环境中可用的标准包。

这将节省大量调试工作,并让您专注于应用程序中最重要的部分,这些部分会增加价值。

大量文本将适合 zip 样式的压缩。从长远来看,花精力改善其性能(在空间或时间上)不太可能得到回报。

于 2011-07-26T19:54:44.077 回答
2

有一个 iOS 嵌入式机制来支持 zlib 算法(Objective-C 中的 zlib.h)。

您可以实现自己的压缩功能并利用 iOS 嵌入式 zlib 功能。并比较性能。

我认为嵌入式 zlib 功能会更快,并且会提供更高的压缩比。

于 2011-07-26T19:08:02.177 回答
1

霍夫曼代码是许多“现实世界”生产算法的支柱。当今常见的压缩算法通过转换其数据以提高压缩比来改进霍夫曼码。当然,有许多特定于应用程序的技术用于执行此操作。

至于你是否应该使用 Huffman 代码,我的问题是,当你可以通过使用已经实现的 3rd 方库来实现更好的压缩和简化代码时,你为什么要这样做?

于 2011-07-26T19:33:00.270 回答
1

是的,我在我的网络应用程序中使用霍夫曼压缩来将我的引擎的完整快照存储在隐藏的输入字段中。首先,它只是出于好奇,但它卸载了我的 SESSION 内存,将其移动到客户端浏览器内存中,我用它来将其存储在一个文件中以备份并与我的同事交换该快照。伙计,当您可以在管理面板中加载文件以在网络中加载引擎时,您必须看到他们的脸!!!它基本上是一个序列化的压缩和 base64 编码的数组。它帮助我节省了大约 15% 的带宽,但我认为我现在可以做得更好。

于 2011-07-26T20:07:08.470 回答
1

是的,您正在使用 Huffman 编码(解码)来阅读此页面,因为网页被压缩为 gzip 格式。因此,全球的网络浏览器几乎每纳秒都在使用它。

霍夫曼编码几乎从不单独使用,而是总是与数据的一些高阶建模一起为霍夫曼算法提供它需要使用的东西。因此,LZ77 将文本和其他面向字节的数据建模为编码为文字和长度/距离对的重复字符串,然后将其馈送到 Huffman 编码,例如使用zlib以deflate 压缩格式。或者对PNG像素进行差分或其他预测编码,然后进行霍夫曼编码。

至于应该使用什么,请查看lz4zlibzstd

于 2018-04-16T17:29:30.490 回答