我需要选择压缩算法

时间:2010-03-07 18:52:52

标签: algorithm language-agnostic compression

我需要选择压缩算法来压缩一些数据。我不知道我将提前压缩的数据类型(想想它有点像WinRAR程序)。

我听说过以下算法,但我不知道应该使用哪种算法。任何人都可以发布一份简短的利弊列表吗?对于我的应用,首要任务是减压速度;第二个优先事项是节省空间。压缩(而非解压缩)速度无关紧要。

  • 放气
  • 内爆
  • Plain Huffman
  • 的bzip2
  • LZMA

5 个答案:

答案 0 :(得分:10)

我运行了一些压缩.tar的基准测试,其中包含高熵数据和文本的混合。结果如下:

Name  - Compression rate* - Decompression Time
7zip  - 87.8%             - 0.703s
bzip2 - 80.3%             - 1.661s
gzip  - 72.9%             - 0.347s
lzo   - 70.0%             - 0.111s

*Higher is better

由此我得出结论,算法的压缩率取决于其名称;按字母顺序排列的第一个将是具有最佳压缩率的那个,依此类推。

因此我决定将lzo重命名为1lzo。现在我有了最好的算法。


编辑:值得注意的是,遗憾的是lzo是唯一拥有非常严格许可(GPL)的人:{/ p>

答案 1 :(得分:5)

如果您需要高减压速度,那么您应该使用LZO。它的压缩速度和比例都不错,但很难超过它的减速速度。

答案 2 :(得分:4)

在Linux内核中,很好地解释了(包括那些内容):

  • Deflate(gzip) - 快速,最差的压缩
  • bzip2 - 缓慢,中等压缩
  • lzma - 非常缓慢的压缩,快速解压缩(然而比gzip慢),最佳压缩

我没有使用其他人,所以很难说,但算法的速度很大程度上取决于架构。例如,有研究表明硬盘上的数据压缩会加速I / O,因为处理器比磁盘要快得多。但是,这在很大程度上取决于瓶颈的大小。

类似地,一种算法可能会广泛使用内存,这可能会或可能不会导致问题(12 MiB - 它是很多还是非常小?在嵌入式系统上它很多;在现代x86上它是微小的内存片段)。

答案 3 :(得分:2)

看看7zip。它是开源的,包含7种独立的压缩方法。我们做过的一些小测试表明,7z格式提供的结果文件比zip更小,而且我们使用的样本数据也更快。

由于我们的标准压缩是zip,我们还没有看到其他压缩方法。

答案 4 :(得分:1)

有关文本数据的综合基准,您可能需要查看Large Text Compression Benchmark

对于其他类型,this might be indicative