快速多维近似模式匹配技术解析
1. 多维模式匹配算法空间需求优化
在多维模式匹配中,传统算法的空间需求为 (O(d!m^d n^{d - 1})),这一数值过高。该问题具有较高的局部性,即文本位置是否匹配仅取决于以该点结尾的最后 ((m + k)^d) 大小的文本“后缀”。
- 当 (k > m) 时,在每个维度上,只需从子文本后方 (2m) 个位置开始,因为在给定行上出现超过 (m) 个错误时,进行 (m) 次替换会更优。
- 若将文本切割成 ((n/s)^d) 个大小为 (s^d) 的 (d) 维子文本,在每个维度上从立方体后方 (m + \min(m, k)) 个位置开始处理,可分别处理每个子文本。此时,总时间为 ((n/s)^d d!m^d (m + \min(m, k) + s)^d),总空间为 (d!m^d (m + \min(m, k) + s)^{d - 1})。
- 例如,选择 (s = m),可得到一个时间复杂度为 (O(d!3^d m^d n^d))、空间复杂度为 (O(d!3^d m^{2d - 1}))(若 (k < m) 则空间复杂度更低)的算法,这更为合理。
- 最小可能的空间需求为 (O(d!2^d m^{2d - 1})),此时时间成本为 (O(d!2^d m^{2d} n^d))(即 (s = 1))。
2. 多维精确字符串匹配算法
在二维情况下,可在 (O(n^2/m)) 的平均时间内搜索文本中的模式。具体做法是,仅遍历 (i \times m) 形式的文本行,同时使用 Aho - Corasick 算法搜索所有模式行,并验证所有潜在匹配,该过滤器不会遗漏任何匹配。
对于更高维