数据压缩算法

时间:2013-05-09 19:16:25

标签: c++ c algorithm compression signal-processing

我想知道是否有人有数据压缩算法列表。我基本上都不知道数据压缩,我希望能够了解更多关于不同算法的知识,看看哪些是最新的,还有很多ASIC尚未开发。

我希望实现一种数据压缩ASIC,它与进入的数据类型(音频,视频,图像等)无关。

如果我的问题太开放,请告诉我,我会修改。谢谢

5 个答案:

答案 0 :(得分:37)

那里有大量的压缩算法。你需要的是无损压缩算法。无损压缩算法压缩数据,使得它可以被解压缩以实现压缩之前给出的精确值。相反的是有损压缩算法。有损压缩可以从文件中删除数据。 PNG图像使用无损压缩,而JPEG图像可以并且经常使用有损压缩。

一些最广为人知的压缩算法包括:

ZIP存档使用霍夫曼编码和LZ77的组合,可以提供快速压缩和解压缩时间相当好的压缩率。

LZ77几乎是RLE的一种通用形式,它通常会产生更好的结果。

Huffman允许最重复的字节表示最少的位数。 想象一下看起来像这样的文本文件:

aaaaaaaabbbbbcccdd

Huffman的典型实现将产生以下映射:

Bits Character
   0         a
  10         b
 110         c
1110         d

因此该文件将被压缩为:

00000000 10101010 10110110 11011101 11000000
                                       ^^^^^
                              Padding bits required

18个字节变为5.当然,该表必须包含在文件中。该算法可以更好地处理更多数据:P

如果Wiki不够,Alex Allain对霍夫曼压缩算法有a nice article

随时询问更多信息。这个话题非常广泛。

答案 1 :(得分:5)

以下是一些无损算法(可以使用这些算法完美地恢复原始数据):

  • 霍夫曼代码
  • LZ78(和LZW变体)
  • LZ77
  • 算术编码
  • 不合逻辑
  • 部分匹配预测(ppm)

许多众所周知的格式,如png或gif,都使用这些变体或组合。

另一方面,也存在有损算法(压缩数据的准确性会降低,但通常效果很好)。最先进的有损技术结合了差分编码,量化和DCT等思想。

要详细了解数据压缩,建议https://www.elsevier.com/books/introduction-to-data-compression/sayood/978-0-12-809474-7。这是一个非常容易获得的介绍文本。第3版以PDF格式在线发布。

答案 2 :(得分:4)

有大量的数据压缩算法。如果你正在寻找百科全书的东西,我推荐Salomon等人的数据压缩手册,它与你可能得到的一样全面(并且在原理和实践方面有很好的部分)还有数据压缩。

我最好的猜测是,基于ASIC的压缩通常是针对特定应用实现的,或者是作为SoC的专用元素实现的,而不是作为独立的压缩芯片实现的。我也怀疑寻找“最新和最好的”压缩格式是这里的方式 - 我希望标准化,成熟度和适合特定目的的适应性更重要。

答案 3 :(得分:3)

我的论文A Survey Of Architectural Approaches for Data Compression in Cache and Main Memory Systems(永久链接here)回顾了许多压缩算法以及在现代处理器中使用它们的技术。它审查了研究级和商业级压缩算法/技术,因此您可能会发现一个尚未在ASIC中实现的算法/技术。

答案 4 :(得分:0)

LZW或Lempel Ziv算法是一个非常无损的算法。伪代码在这里:http://oldwww.rasip.fer.hr/research/compress/algorithms/fund/lz/lzw.html