数据压缩算法
Posted
技术标签:
【中文标题】数据压缩算法【英文标题】:Data Compression Algorithms 【发布时间】:2013-05-04 09:06:39 【问题描述】:我想知道是否有人列出了。我基本上对数据压缩一无所知,我希望能更多地了解不同的算法,看看哪些是最新的,并且还没有在很多 ASIC 上开发。
我希望实现一个独立于传入数据类型(音频、视频、图像等)的数据压缩 ASIC
如果我的问题过于开放,请告诉我,我会修改。谢谢
【问题讨论】:
嗯,有很多压缩算法,您在寻找“最佳”方面的内容。比如速度,还是完全无损,或者压缩比最高?就其为他们设计的 ASIC 而言,这更像是一个研究问题。我敢肯定,即使不是所有主流压缩算法,大多数也有某种 ASIC 实现。 ccs.neu.edu/home/jnl22/oldsite/cshonor/jeff.html @taocp 链接失效 【参考方案1】:这里有一些无损算法(可以使用这些算法完美恢复原始数据):
霍夫曼密码 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】:我的论文A Survey Of Architectural Approaches for Data Compression in Cache and Main Memory Systems(永久链接here)回顾了许多压缩算法以及在现代处理器中使用它们的技术。它审查了研究级和商业级压缩算法/技术,因此您可能会发现尚未在 ASIC 中实现的一种。
【讨论】:
【参考方案3】:周围有大量的数据压缩算法。如果您正在寻找百科全书式的东西,我推荐 Salomon 等人的 Handbook of Data Compression,它与您可能获得的一样全面(并且有关于原则和实践的好章节数据压缩,以及)。
我的最佳猜测是,基于 ASIC 的压缩通常是为特定应用程序实现的,或者作为 SoC 的专用元件,而不是作为独立的压缩芯片。我也怀疑寻找“最新和最棒”的压缩格式是否适合我——我认为标准化、成熟度和针对特定目的的适用性会更重要。
【讨论】:
【参考方案4】:那里有大量的压缩算法。您在这里需要的是无损压缩算法。无损压缩算法压缩数据,以便可以对其进行解压缩以准确实现压缩前给出的内容。相反的是有损压缩算法。有损压缩可以从文件中删除数据。 PNG 图像使用无损压缩,而 JPEG 图像可以而且经常使用有损压缩。
一些最广为人知的压缩算法包括:
RLE Huffman LZ77ZIP 档案使用 Huffman 编码和 LZ77 的组合来提供快速的压缩和解压缩时间和相当不错的压缩比。
LZ77 几乎是 RLE 的一种通用形式,它通常会产生更好的结果。
霍夫曼允许重复最多的字节代表最少的位数。 想象一个看起来像这样的文本文件:
aaaaaaaabbbbbcccdd
霍夫曼的典型实现会产生以下地图:
Bits Character
0 a
10 b
110 c
1110 d
所以文件会被压缩成这样:
00000000 10101010 10110110 11011101 11000000
^^^^^
Padding bits required
18 字节下降到 5。当然,表必须包含在文件中。该算法在更多数据下效果更好:P
Alex Alllain 在 Huffman 压缩算法上有 a nice article,以防 Wiki 不够用。
请随时询问更多信息。这个话题太广泛了。
【讨论】:
我只是出于好奇而问-是否有任何压缩算法可以识别数据中的模式?例如:ababab
.
这是一个稍微复杂一点的 RLE 版本,或者更准确地说,LZ77 :P一条数据会缩小文件)
@Magtheridon96,哇,非常感谢。您是否知道在不同平台上显示这些算法的性能标记的任何资源?例如,有人可以让 Huffman 以多快的速度运行,如果它是软件还是硬件实现?我正在寻求实现一个硬件数据压缩单元(如果我认为它有意义的话),这将比软件实现提供相当大的改进。
@Magtheridon96,我是否需要提前了解有关数据的统计信息?我打算只处理二进制数据。
@FábioDuqueSilva 好吧,我不知道实现是如何做到的,但我知道使用 O(1) 空间是可能的,因为您可以添加一个额外的整数来跟踪填充位非常结束(即,与表格一起,您存储了一个额外的整数:5)【参考方案5】:
LZW 或 Lempel Ziv 算法是一种很好的无损算法。此处伪代码:http://oldwww.rasip.fer.hr/research/compress/algorithms/fund/lz/lzw.html
【讨论】:
以上是关于数据压缩算法的主要内容,如果未能解决你的问题,请参考以下文章