各种压缩算法的最佳字典大小是多少?

时间:2019-06-20 22:10:49

标签: zip compression lzma

由于各种原因,我正在使用LZMA2压缩许多大小不同的数据块。由于有许多并行处理的块,因此需要将内存使用率保持在合理水平。给定n个字节的数据,要使用的最佳字典大小是多少?典型的源块大小从4k到4Mb不等。

我推测字典大小大于要压缩的字节数没有意义吗?我还推测,如果将数据压缩到一半大小,则字典大小不会大于n / 2个字节。

当然,这只是推测,因此,对于这种情况的成因有一定的了解,将不胜感激!

欢呼

约翰

2 个答案:

答案 0 :(得分:0)

根据您的特定需求,可能没有绝对最佳的选择。压缩算法(虽然我不特别了解LZMA)通常允许您调整参数以在内存消耗,压缩速度和压缩率之间找到最佳平衡。您将需要使用这些参数,并查看它们给您的实际工作量带来了什么影响。 默认参数很可能很好,只有在您的要求异常的情况下(例如,如果您具有硬内存或时间限制),才需要进行调整。

答案 1 :(得分:0)

大小为m的字典实际上只是未压缩数据最后看到的字节的内存,上限为m。因此,对于您的使用而言,m := n是最佳的以独立方式充分利用LZMA压缩的方法。

如果您的块具有相似性,则可以通过使用压缩器和解压缩器都知道的大小为t的样本块来训练LZMA,从而进一步提高压缩率(有关详细信息,请参见Web上的“训练压缩”) )。在这种情况下,m := n + t将是完美的。