我经常需要压缩彼此非常相似的文件。
目前我使用 7Zip,它使用 8 个核心和超级设置,在大约 35 分钟内将 16GB 的文件压缩到 1.2GB。
在我看来,大部分时间都花在计算用于压缩的字典上。由于文件非常相似,实际使用的字典可能也类似。
是否有一个基于 Windows 的压缩工具(7Zip 带有我不知道的选项,或者不同的工具)可以保存字典并将该保存的字典重新用于后续文件?
有没有更好的方法来解决保持与我类似的压缩率的问题,同时压缩速度明显更快?
答案1
这伦佩尔-齐夫-韦尔奇(LZW) 压缩算法本质上是计算密集型的,大部分工作本身实际上是计算字典。这正是 LZW 的工作原理。
算法本身会为它扫描到的每一个“符号”添加一个新的字典条目,因此在每次迭代中,都会向字典中添加一个新条目。实际上,字典变成文件的压缩副本,因此实际上是仅有的首先,LZW 压缩需要花费大量时间进行计算。
如果你使用了类似哈夫曼编码,字典重用确实是可能的(代价是压缩率/大小可能不是最优的)。但是,大多数现代压缩算法和工具都使用 LZW 算法来提高效率和速度(霍夫曼压缩需要对数据进行两次传递 [一次生成霍夫曼树/表,另一次实际压缩数据],而 LZW 可以在一次传递中完成)。
答案2
与 DEFLATE 算法不同,7-Zip 的 LZMA 默认使用固实压缩,利用文件间冗余。只要文件足够小,默认设置下即可使用。
使用默认设置2 GB为了实心块尺寸,一个 16 GB 的文件实际上被压缩为 8 个独立的块。
正如@Breakthorugh所说,字典是动态生成的。您可以通过设置来验证这一点实心块尺寸到坚硬的(一次压缩所有文件)和非固体(单独压缩每个文件)。
增加实心块尺寸实际上会导致速度变慢,但压缩率可能会更高。例如,使用非固实压缩压缩两个相同的文件将导致存档大小几乎增加一倍。