论文部分内容阅读
LZ77算法,又被称为“滑动窗口压缩”,它依赖两个滑动窗口来进行压缩,一个窗口包含已输入数据流,称为字典窗口DW(dictionary window);另一个窗口包含待压缩编码的字符串,即待编码窗口CW(code window)。LZ77通过查找在DW中与CW相同的字符数据并将匹配成功的数据编码成三元组写入压缩文件,从而实现数据压缩功能。后缀数组(Suffix Array,简称SA)作为一种常用的文本索引机制,由于其结构简单及空间效率较好的特点,现已经结合到LZ算法中。但这种结合方法,每次都需重建SA,时间复杂度较高,效率不高。首先分析字符串匹配等算法并进行对比,在对已提出各种LZ77改进算法的研究分析的基础上,进一步对后缀数组与最长公共前缀((Longest Common Prefix,简称LCP)等相关理论进行研究分析,阐述三种后缀数组的构建算法并对比。然后分析现有结合算法的思想及其不足,通过对SA的特点分析,提出完全后缀这一新术语,利用LCP数组把SA分为完全后缀(Complete Suffix Array,简称CSA)和非完全后缀(Uncompleted SuffixArray,简称UCSA),由于窗口滑动后UCSA保持了原有的偏序关系,且占SA比例高,采用二分插入法把CSA插入到UCSA中构建新的SA,可以更高效地重建SA。从而在保证压缩效率不降低的同时,提高整个算法的压缩效率。最后通过实验,对多种不同大小的文件进行测试,对比现有结合算法和改进算法的效率,表明改进算法的实践优越性。同时实验中的最长公共字符串平均长度和完全后缀数组的平均大小,也表明了改进算法的优越性。