See MJ !

程序媛早起为码字

无损压缩算法优劣之比较

数据压缩常见于传输、存储,按照数据能否被还原,压缩算法可以分有损压缩和无损压缩。有损压缩,常见于视频,图像传输,主要为了降低带宽,加快传达。这里讨论无损压缩。无损压缩主要是采用了编码的技术,利用数据冗余进行压缩而不引起失真,例如Huffman编码。

基于无损压缩的算法有很多,算法相对复杂,常见的有zip, 7z, winrar, lzop,gzip等。这里无关算法,只关心它们的使用。有的压缩算法常常会结合打包进行,例如gzip和tar打包结合,有的算法,不仅利用了文件内部的冗余,也利用了文件和文件之间的冗余。基于此,压缩算法又分为两种,solid和非solid的。

solid compression,多个文件一起打包,特别是对于同种格式的数据文件,可以利用文件之间的相似性,得到最大程度的压缩率。这种方式比较适用于打包并压缩许多无压缩小文件的情况。例如7zip和gzip算法,都属于这种类型。

非solid compression,即使在多个文件一起打包时,内部也是针对一个一个文件进行压缩,文件的隔离性很好,压缩速度也比较快,总之各种好,唯独在处理许多小文件的压缩时,效果不是很理想。例如zip的压缩。

凡使用压缩算法,无论是传输和存储,无非是空间换时间,或者时间换空间的障眼法。压缩算法使用的指标,常见有:压缩时间、压缩率、解压速度、内存要求、压缩中是否保持原有文件属性、有没有简单易用的库可用,等等。

常用压缩算法,比较: