4.9 多模式串匹配
大约 2 分钟
4.9 多模式串匹配
多模式串匹配
1. 多模式串匹配的定义
多模式串匹配(Multiple Pattern Matching)是指在文本串中同时查找多个模式串的问题。与单模式串匹配(如 KMP 算法)不同,多模式串匹配需要在一个文本串中同时查找多个模式串的所有出现位置。
2. 主要算法介绍
2.1 字典树(Trie)
字典树是一种树形数据结构,用于高效地存储和检索字符串集合。它的主要特点是:
- 每个节点代表一个字符
- 从根节点到某个节点的路径上的字符连接起来,就是该节点对应的字符串
- 每个节点的所有子节点包含的字符都不相同
字典树的主要应用:
- 字符串检索
- 词频统计
- 字符串排序
- 前缀匹配
2.2 AC 自动机(Aho-Corasick)
AC 自动机是在字典树的基础上,结合了 KMP 算法的思想,用于多模式串匹配的算法。它的主要特点是:
- 基于字典树构建
- 添加了失败指针(fail pointer),类似于 KMP 的 next 数组
- 可以同时匹配多个模式串
- 时间复杂度为 O(n + k),其中 n 是文本串长度,k 是所有模式串的总长度
AC 自动机的主要应用:
- 敏感词过滤
- 病毒特征码匹配
- 文本分析
2.3 后缀数组(Suffix Array)
后缀数组是一种数据结构,用于高效地处理字符串的后缀。它的主要特点是:
- 将字符串的所有后缀按字典序排序
- 可以快速查找子串
- 支持最长公共前缀(LCP)查询
后缀数组的主要应用:
- 字符串匹配
- 最长重复子串
- 最长公共子串
- 字符串压缩
3. 算法比较
算法 | 预处理时间复杂度 | 匹配时间复杂度 | 空间复杂度 | 适用场景 |
---|---|---|---|---|
字典树 | O(k) | O(m) | O(k) | 前缀匹配、字符串集合操作 |
AC 自动机 | O(k) | O(n + k) | O(k) | 多模式串精确匹配 |
后缀数组 | O(n log n) | O(m + log n) | O(n) | 子串匹配、后缀操作 |
其中:
- n 为文本串长度
- m 为模式串长度
- k 为所有模式串的总长度
4. 应用场景
文本搜索和过滤
- 敏感词过滤
- 关键词提取
- 文本分类
生物信息学
- DNA 序列匹配
- 蛋白质序列分析
网络安全
- 入侵检测
- 病毒特征码匹配
自然语言处理
- 分词
- 命名实体识别
- 文本摘要