数据压缩

为了节省信息的存储空间和提高信息的传输效率,对信息编码长度进行压缩的技术。在数据处理过程中存储大量数据和在计算机通信网络中传输大量数据,都需要很大的费用。采用数据压缩技术在这方面常常可以节省80%以上的费用。但数据压缩也带来一些问题。数据压缩会增加软件系统的复杂性,增加计算机系统的负担;被压缩后的数据可能会失掉原有的良好的标准形式,降低它的通用性和可移植性;可能压缩掉用于出错检查的冗余数据,因而降低数据的可靠性。因此,是否采用压缩技术需要根据具体问题来决定,而无统一的定则。

原则上说,数据压缩技术与数据的语义有关。合理的压缩是去掉数据中的无关信息,而保存有关信息。数据的形式虽有变化,但它所保存的有关语义信息没有变化。数据压缩技术分为两种,一种和语义无关,压缩时只从数据的形式出发,不涉及数据信息内容,这种技术适用于任何数据。另一种与语义相关,压缩时考虑数据信息内容和语义,去掉其中一些冗余的信息。常用的压缩技术有模式替代、压缩重复字符、免写空字域、编码替代、不等长编码、相邻数据利用、消除冗余信息等。

模式替代

扫描整个文本,找出经常出现的多字节模式(字符组合),用一个单字节模式去替代,将替代规则记入替代登记表。例如

zhang chang zhang可以写成 αβ chβ αβ用α替代zh,用β替代ang。α,β是两个闲置的字符。

压缩重复字符

有些数值文件中包含大量的前导零,又有些文件包含大量重复的空格符或其他字符,只要设法指出这些字符是重复的并指出重复次数,就可节省大量存储空间。在大多数图形处理应用问题中,字符重复现象大量存在。例如可以利用一个8位EBCDIC码:

来指出上述两点。一般EBCDIC码中b6位置不为零,用o表示下一个字节要重复,b0b5这6位指明字符重复的次数。

免写空字域

文件中一个记录包含若干字域,如果很多字域值是空的则可用标志指明,例如用一个二进位0表示空,1表示非空,从而避免存放大量的空字域。

编码替代

对于一个属性取值是有限的集合,可以用简单的编码替代,把替代规则存入替代字典。例如,大学教师职称类别、学校的系和专业、性别等,均可用某一编码替代。

不等长编码

根据字符出现的频率重新编码,频率大的字符用短码,频率小的字符用长码。这样可以缩短平均编码长度。字符使用频率越是不平衡,压缩的效果越明显。与此相反,如果所有字符均以等概率出现,则压缩的结果可能比不压缩更坏。

相邻数据利用

分析相邻数据项的关系有时会得出很有效的压缩办法。例如,下面是一段字典上的单词的压缩编码:

单词          压缩编码

equal          0equal

equalisation      5isation

equalise        7e

equaliser        8r

equalitarian      6tarian

equalitariansm     ╣sm(╣表示12)

equality        7y压缩编码第一个字符是数字,表示该项和前一数据项有多少个字符是相同的。

对数值数据可以采取求差法,例如需要存储每天累计降雨量时,可以存储每天降雨量来代替,需要时累加求出。这种方法也是压缩图形数据的很好方法。

消除冗余信息

有些信息根据场合和给定就能得出,可从数据中消除这部分信息。如日期:1985年8月17日,可以简写为85,8,17,计算机中用6个字节表示;或者约定,年用7位二进位,月用4位,日用5位,总共16位,分两个字节。

常用的十进制数在计算机中每一位都用4位或8位二进制数存放,如果预先将它转换成二进制就能节省很多存储空间,而且还便于算术运算。

数据压缩可以减少存储空间,但只是解决问题的一个方面。还应从整个系统考虑,减少冗余的信息,从而减少压缩数据的工作量,这是数据库管理系统研究的主要问题之一。

参考书目
  1. J.Martir,Computer Data Base Organization,Prentice-Hall, Englewood Cliffs, N.J., 1977.