目录
十五、数据压缩
压缩数据通过部分消除数据中的冗余来减少发送或存储的数据量。当我们产生数据的同时,冗余也就产生了。通过数据压缩,提高了数据传输和存储的效率,同时保护了数据的完整性。
15.1 引言
数据压缩意味着发送或是存储更少的位数,一般可以分为两类:无损压缩和有损压缩。
15.2 无损压缩方法
在无损压缩中,数据的完整性受到保护,压缩解压后的数据与原始数据是完全一样的。解压和压缩是完全相反的两个过程。通常这种压缩方法使用在不希望数据损失的地方,如:压缩文档资料或应用程序。无损压缩有3种方法:游程长度编码、哈夫曼编码和Lempel-Ziv编码编码。
15.2.1 游程长度编码
游程长度编码也许是最简单的压缩方法,它可以用来压缩由任何符号组成的数据。
这种编码的大致思想是:将数据中连续重复出现的符号用一个字符和它出现的次数来代替。例如,AAAAAAAA可以使用A08来代替,这里我们使用两位数字来表示重复次数。
在位模式中,数据只有0和1两种符号,并且一种符号出现频率比另一种符号更高,那么这种压缩方法就更有效。例如,在位模式中,0比1出现的更频繁,那么,就可以在发送时只标记两个1中间有几个0来进行压缩。
这里使用四位二进制数来表示两个1中间0的个数。在解压时,只需要每四位还原0的个数,然后在后面加上1,重复这个操作就可以还原数据。这里有个疑问,大于15位的0如何表示?解决方法是,当四位二进制数等于15,默认后面四位依然是表示这次的0的个数,例如:25个0表示位(1111 1010)、15表示为(1111 0000)。