字符串匹配String matching
在文本中查找模式的出现位置。单模式与多模式的复用方式不同,还要区分字节、字符或其他符号序列的匹配语义。
怎样选择#
- n 为文本长度,m 为单个模式长度,z 为报告的匹配数量;假定一次符号比较或状态转移为 O(1)。
- 两者都做精确序列匹配。大小写折叠、Unicode 规范化和分词等语义需要在接口或预处理层明确。
算法对照#
| 具体算法 | 问题与前提 | 时间复杂度 | 辅助空间 | 选择与取舍 |
|---|---|---|---|---|
| KMP 字符串匹配 | 单模式精确匹配 | 预处理与扫描共 | 前缀 / 失败函数实现 | 前缀表复用失配前的信息,文本指针不回退;模式状态简单。 |
| Aho–Corasick | 一组模式在同一文本中匹配 | 扫描 ,另计构建与转移存储 | 稀疏自动机约 ;完整转移表 | Trie 与失败链接共享模式前缀;模式集、字母表和输出量影响内存与总成本。 |
左右滑动查看完整对照。点击算法名称,查看原理、约束和实现。
参考资料#
Boost Algorithm · Knuth–Morris–Pratt