Aho-Corasick 多模式匹配算法、AC自动机详解

简介:

Aho-Corasick算法对应的数据结构是Aho-Corasick自动机,简称AC自动机。

搞编程的一般都应该知道自动机FA吧,具体细分为:确定性有限状态自动机(DFA)和非确定性有限状态自动机NFA。普通的自动机不能进行多模式匹配,AC自动机增加了失败转移,转移到已经输入成功的文本的后缀,来实现。

1.多模式匹配

  多模式匹配就是有多个模式串P1,P2,P3...,Pm,求出所有这些模式串在连续文本T1....n中的所有可能出现的位置。

  例如:求出模式集合{"nihao","hao","hs","hsr"}在给定文本"sdmfhsgnshejfgnihaofhsrnihao"中所有可能出现的位置

2.Aho-Corasick算法  

  使用Aho-Corasick算法需要三步:

  1.建立模式的Trie

  2.给Trie添加失败路径

  3.根据AC自动机,搜索待处理的文本

  下面说明这三步:

2.1建立多模式集合的Trie

  Trie树也是一种自动机。对于多模式集合{"say","she","shr","he","her"},对应的Trie树如下,其中红色标记的圈是表示为接收态:

  

2.2为多模式集合的Trie树添加失败路径,建立AC自动机

  构造失败指针的过程概括起来就一句话:设这个节点上的字母为C,沿着他父亲的失败指针走,直到走到一个节点,他的儿子中也有字母为C的节点。然后把当前节点的失败指针指向那个字母也为C的儿子。如果一直走到了root都没找到,那就把失败指针指向root。

  使用广度优先搜索BFS,层次遍历节点来处理,每一个节点的失败路径。  

  特殊处理:第二层要特殊处理,将这层中的节点的失败路径直接指向父节点(也就是根节点)

 

2.3根据AC自动机,搜索待处理的文本

  从root节点开始,每次根据读入的字符沿着自动机向下移动。

  当读入的字符,在分支中不存在时,递归走失败路径。如果走失败路径走到了root节点,则跳过该字符,处理下一个字符。

  因为AC自动机是沿着输入文本的最长后缀移动的,所以在读取完所有输入文本后,最后递归走失败路径,直到到达根节点,这样可以检测出所有的模式。

3.Aho-Corasick算法代码示例

  模式串集合:{"nihao","hao","hs","hsr"}

  待匹配文本:"sdmfhsgnshejfgnihaofhsrnihao"

  代码:

  View Code

  输出:

  



本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/6548845.html,如需转载请自行联系原作者

相关文章
|
7月前
|
数据采集 运维 监控
序列挖掘模式算法:提升企业电脑监控软件安全性的创新路径
当谈到提升企业电脑监控软件的安全性时,咱们不妨考虑一下序列模式挖掘算法,它们其实就是电脑监控软件的"秘密武器",能够帮助我们识别和分析用户以及系统行为中的种种奇奇怪怪的模式。这可不是为了解密谜题,而是为了更好地抓住那些异常活动和潜在的安全威胁。下面我们来看看如何用序列模式挖掘算法来提高企业电脑监控软件的安全性——
128 0
|
2月前
|
算法 测试技术 C++
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
【数据结构】模式匹配之KMP算法与Bug日志—C/C++实现
36 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】关联模式评估方法及Apriori算法超市购物应用实战(超详细 附源码)
【数据挖掘】关联模式评估方法及Apriori算法超市购物应用实战(超详细 附源码)
50 0
|
4月前
|
数据采集 算法 前端开发
【MATLAB】 稳健的经验模式分解REMD信号分解算法
【MATLAB】 稳健的经验模式分解REMD信号分解算法
63 0
|
4月前
|
算法 测试技术 C#
C++单调向量算法:132模式枚举1简洁版
C++单调向量算法:132模式枚举1简洁版
|
4月前
|
算法 测试技术 C#
C++二分查找算法:132模式枚举3简洁版
C++二分查找算法:132模式枚举3简洁版
|
4月前
|
算法 测试技术 C#
C++单调向量算法:132 模式解法三枚举1
C++单调向量算法:132 模式解法三枚举1
|
6月前
|
算法
串的模式匹配相关问题(BF算法、KMP算法)
串的模式匹配相关问题(BF算法、KMP算法)
57 0
|
7月前
|
算法 Java
【Java】BF算法(串模式匹配算法)
【Java】BF算法(串模式匹配算法)
90 1
|
8月前
|
算法
2022 数据结构与算法《王道》学习笔记 (十一)KMP算法 详细归纳总结 改进的模式匹配算法
2022 数据结构与算法《王道》学习笔记 (十一)KMP算法 详细归纳总结 改进的模式匹配算法
2022 数据结构与算法《王道》学习笔记 (十一)KMP算法 详细归纳总结 改进的模式匹配算法

热门文章

最新文章