-
随着计算机技术和网络技术的发展,各种类型的数据层出不穷,海量的数据需要传输和存储。为了减少数据传输和存储的代价需要对数据进行压缩。根据不同的数据种类及重建质量要求,压缩算法也各不相同。比如语音压缩、图像压缩[1-6]等,根据重建质量的不同要求,可以进行限失真压缩或者无失真压缩。
由于文本数据必须进行精确重建,只能进行无失真压缩。目前文本压缩算法众多,许多算法是针对各种不同类型的应用[7-11];广泛使用的文本压缩工具是WinRar和Winzip,这两种压缩算法涉及知识产权保护,详细编码过程未见公布,可能采用了预测编码、游程长度编码、LZ算法或者LZW等改进算法[7-11]。而这些算法主要突出于文本搜索算法,其中LZW搜索算法需要建立码书[9-10],使用码书可以提高搜索速度,对于长串匹配数据而言,还可以有效减少LZ算法中的偏移量,利于提高编码效率。而这两种文本压缩算法使用的熵编码以及其他细节未见文献报道。
为了设计自主知识产权的文本压缩方法,本文拟采用原始LZ77算法,整个过程并不需要建立码表,目的主要在于尝试使用算术编码对文本数据扫描参数进行压缩,并为后续进一步研究奠定基础。
本文主要工作如下:提出了一种局部参数优化算法,从备选参数中选择合理的局部优化参数;对LZ77算法进行改进,增加了预测编码,并记录预测标记。预测编码标记为0和1组成的序列,使用已经编码的前面数据产生上下文,并使用算术编码器进行编码,能够有效提高编码效率。选择出的扫描参数,即偏移量、匹配数据长度和保留文本数据,都使用算术编码器进行编码,并根据各类数据的特点使用不同方法产生效应上下文。
HTML
-
对所提出的文本压缩算法进行仿真和测试。采用4种文本数据对本算法性能进行测试,并与Winzip、WinRar压缩效率进行比较,具体结果如表 1所示。其中Test1是Word文档,Test2是纯文字文档,Test3是C语言程序代码(JPEG-LS核心算法),Test4是Lena图像。
byte 文件名(字节数) Winzip WinRar 本文算法 Test1(333 824) 72 205 63 523 63 408 Test2(37 492) 36 844 36 173 35 166 Test3(13 525) 3 469 3 337 3 426 Test4(262 144) 222 707 168 938 183 726 由表 1结果可以看出,对这4类不同类型数据,本文算法压缩性能明显好于Winzip,而在Word文档或者纯文字文档压缩方面与WinRar相当或者略好;而在C语言程序代码压缩方面,本文算法也与WinRar相当或者略低,而对图像压缩进行压缩时,本文压缩效率与WinRar还有一定差距。
与WinRar比较结果可以看出,本文算法对图像数据压缩没有取得好的效果,这是因为本文算法没有进一步使用数据之间的相关性进行编码,因此如何进一步利用相关性进行编码值得进一步研究。
为了考察参数$\alpha $变化对压缩效率影响,选择参数k1=10,k2=6,使用Test1进行测试,具体结果如表 2所示。从表 2可以看出,当$\alpha $大于一定值时对压缩效率影响非常有限。从式(7)可以看出,只有当偏移量很大时,参数选择才有意义,其目的是去除那些偏移量很大,而匹配字节长度较小的那些参数。而当$\alpha $大于一定值时,选择参数的差异并不是太大,所以压缩效率变化较小。
byte $\alpha $ 压缩文件长度 4.0 65 987 5.0 64 635 5.5 63 648 6.0 63 632 6.20 63 408 6.50 63 591 7 63 574 8.0 63 664 9 63 606 当$\alpha $取值较小时,参数选择的变化就体现出来,一些偏移量很大而匹配字节长度有限的参数被选择,从而降低了编码效率,编码输出文件长度增加较大,从而影响总体编码效率。
为了考察Glomb参数选择对压缩效率的影响,取$\alpha = 6.2$,${k_2} = 6$,改变参数${k_1}$,使用Test1进行测试,结果如表 3所示。
byte k1 压缩文件长度 6 66 724 7 65 819 8 64 867 9 64 509 10 63 408 11 63 415 12 63 354 13 63 431 从表 3可以看出,参数的变化对压缩效率有一定影响,参数小于10时,随着参数减小,压缩效率明显降低;而当参数大于等于10时,由于偏移量大而匹配数据长度小的参数被去除,压缩效率没有明显变化。
为了观察k2变化对压缩效率影响,取$\alpha = 6.2$,k1=10,改变参数k2,使用Test1进行测试,实验结果如表 4所示。
byte k2 压缩文件长度 3 63 612 4 63 625 5 63 618 6 63 408 7 63 617 8 63 671 9 64 867 10 64 557 从表 4可以看出,随着k2的变化,对压缩效率有一定影响,但是不是十分明显。从式(7)可看出,由于大偏移量受到k1约束,k2取值只是辅助参数选择的细节,且受到α变化的制约,因此对总体效率的影响不是很大,其取值大小与匹配字节长度小的参数选择产生一定影响。当其取值太大,会增加小匹配字节长度选取的门槛,所以对压缩效率影响较大;而取值较小时,其影响反而不是太大。
综合k1、k2变化对压缩效率影响,结果与式(7)说描述的含义是相符的,即:
1) k1主要是限制偏移量大而匹配字节长度较小的参数,以提高编码效率;当其取值较小时,偏移量大,匹配字节长度较小的参数被选择,从而影响编码效率;而取值较大时,只有极少的参数被限制,对压缩效率的影响反而较小。因为匹配字节长度较大的参数,k1变化对其没有约束。
2) k2对偏移量变化没有限制作用,主要辅助设置匹配字节长度门槛。取值越大,更多长度较小的参数被去除,效率降低;而较小的取值,反而对结果影响不大。