压缩文件模式匹配算法的研究与优化
1. 模式匹配算法概述
模式匹配算法在文本处理中具有重要作用。有一种基于位并行的模式匹配算法,其理论复杂度为 $O(n + R)$(对于长模式,由于使用位并行,时间复杂度为 $O(mn/w + R)$)。当 $n = o(u)$ 时,该算法比在未压缩文本中搜索更快。
在实际应用中,该算法效率较高,因为处理压缩文件的每个元素时,除了一次块连接和一次搜索更新外,无需额外工作。然而,实验结果表明,该算法在实际运行中所需时间是对未压缩文本运行 Shift - Or 算法的两倍。这主要是因为 Shift - Or 算法非常简单,且压缩匹配算法存在引用局部性问题,它会随机读取块定义数组中的位置,而未压缩算法基本是原地工作,计算机的缓存机制更倾向于后者。
不过,使用该算法直接搜索压缩文件的速度是先解压缩再搜索未压缩文件速度的两倍。为了进一步优化该算法,还创建了 Mark - LZ78 变体,通过为字典树中的每个块标记是否为叶子节点的位标志,避免存储不再使用的块描述,但实验显示性能并未得到提升。
2. LZ77 压缩算法
2.1 压缩算法原理
LZ77 压缩算法的基本思想是识别文本中的两个重复段,并将第二个重复段标记为对第一个重复段的引用(包括文本中的位置和重复部分的长度)。具体来说,假设文本 $T$ 的前缀 $t_1 \cdots t_i$ 已经被压缩成一系列块 $Z = b_1 \cdots b_c$,我们需要寻找 $t_{i + 1} \cdots t_u$ 的最长前缀 $v$,该前缀已经出现在 $t_1 \cdots t_i t_{i + 1} \cdots t_{i + |v| - 1