数据压缩(拼音:shù jù yā suō;英语:data compression and compaction),为了节省信息的存储空间和提高信息的传输效率,对信息编码长度进行压缩的技术。数据压缩会增加软件系统的复杂性,增加计算机系统的负担;被压缩后的数据可能会失掉原有的良好的标准形式,降低它的通用性和可移植性;可能压缩掉用于出错检查的冗余数据,因而降低数据的可靠性。因此,是否采用压缩技术需要根据具体问题来决定,而无统一的定则。
数据压缩技术与数据的语义有关。合理的压缩是去掉数据中的无关信息,而保存有关信息。数据的形式虽有变化,但它所保存的有关语义信息没有变化。数据压缩技术分为两种,一种和语义无关,压缩时只从数据的形式出发,不涉及数据信息内容,这种技术适用于任何数据。另一种与语义相关,压缩时考虑数据信息内容和语义,去掉其中一些冗余的信息。常用的压缩技术有模式替代、压缩重复字符、免写空字域、编码替代、不等长编码、相邻数据利用、消除冗余信息等。
在计算机科学和信息论中,数据压缩或者源编码是按照特定的编码机制用比未经编码少的数据位元(或者其它信息相关的单位)表示信息的过程。例如,如果我们将“compression”编码为“comp”那么这篇文章可以用较少的数据位表示。一种流行的压缩实例是许多计算机都在使用的ZIP 文件格式,它不仅仅提供了压缩的功能,而且还作为归档工具(Archiver)使用,能够将许多文件存储到同一个文件中。
分类
数据压缩的方式非常多,不同特点的数据有不同的数据压缩方式(也就是编码方式),下面从几个方面对其进行分类。
1.即时压缩和非即时压缩
比如打IP电话,就是将语音信号转化为数字信号,同时进行压缩,然后通过Internet传送出去,这个数据压缩的过程是即时进行的。即时压缩一般应用在影像、声音数据的传送中。即时压缩常用到专门的硬件设备,如压缩卡等。
非即时压缩是计算机用户经常用到的,这种压缩在需要的情况下才进行,没有即时性。例如压缩一张图片、一篇文章、一段音乐等。非即时压缩一般不需要专门的设备,直接在计算机中安装并使用相应的压缩软件就可以了。
2.数据压缩和文件压缩
其实数据压缩包含了文件压缩,数据本来是泛指任何数字化的信息,包括计算机中用到的各种文件,但有时,数据是专指一些具有时间性的数据,这些数据常常是即时采集、即时处理或传输的。而文件压缩就是专指对将要保存在磁盘等物理介质的数据进行压缩,如一篇文章数据、一段音乐数据、一段程序编码数据等的压缩。
3.无损压缩与有损压缩
无损压缩利用数据的统计冗余进行压缩。数据统计冗余度的理论限制为2:1到5:1,所以无损压缩的压缩比一般比较低。这类方法广泛应用于文本数据、程序和特殊应用场合的图像数据等需要精确存储数据的压缩。有损压缩方法利用了人类视觉、听觉对图像、声音中的某些频率成分不敏感的特性,允许压缩的过程中损失一定的信息。虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了比较大的压缩比。有损压缩广泛应用于语音、图像和视频数据的压缩。
算法与编码
Lempel-Ziv(LZ)压缩方法是最流行的无损存储算法之一。DEFLATE是 LZ 的一个变体,它针对解压速度与压缩率进行了优化,虽然它的压缩速度可能非常缓慢,PKZIP、gzip 以及 PNG 都在使用 DEFLATE。LZW (Lempel-Ziv-Welch)是 Unisys 的专利,直到2003年6月专利到期限,这种方法用于 GIF 图像。另外值得一提的是 LZR (LZ-Renau) 方法,它是 Zip 方法的基础。LZ 方法使用基于表格的压缩模型,其中表格中的条目用重复的数据串替换。对于大多数的 LZ 方法来说,这个表格是从最初的输入数据动态生成的。这个表格经常采用霍夫曼编码维护(例如,SHRI、LZX)。 一个性能良好基于 LZ 的编码机制是 LZX,它用于微软公司的 CAB 格式。
最好的压缩工具将概率模型预测结果用于算术编码。算术编码由 Jorma Rissanen 发明,并且由 Witten、Neal 以及 Cleary 将它转变成一个实用的方法。这种方法能够实现比众人皆知的哈夫曼算法更好的压缩,并且它本身非常适合于自适应数据压缩,自适应数据压缩的预测与上下文密切相关。算术编码已经用于二值图像压缩标准 JBIG、文档压缩标准 DejaVu。文本 输入 系统 Dasher 是一个逆算术编码器。