【问题标题】:Data Compression Algorithms数据压缩算法
【发布时间】:2013-05-04 09:06:39
【问题描述】:

我想知道是否有人列出了数据压缩算法。我基本上对数据压缩一无所知,我希望能更多地了解不同的算法,看看哪些是最新的,并且还没有在很多 ASIC 上开发。

我希望实现一个独立于传入数据类型(音频、视频、图像等)的数据压缩 ASIC

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

【问题讨论】:

  • 嗯,有很多压缩算法,您在寻找“最佳”方面的内容。比如速度,还是完全无损,或者压缩比最高?就其为他们设计的 ASIC 而言,这更像是一个研究问题。我敢肯定,即使不是所有主流压缩算法,大多数也有某种 ASIC 实现。
  • @taocp 链接失效

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


【解决方案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 图像可以而且经常使用有损压缩。

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

        ZIP 档案使用 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-05
          • 2011-03-08
          • 2010-09-28
          • 1970-01-01
          • 2011-11-15
          相关资源
          最近更新 更多