有时候可能需要按一个关键字词列表来过滤信息,例如过滤黄色或其他非法信息
调用indexOf方法来查找关键字集合看起来效率不高,Aho-Corasick算法可用用来在文本中搜索多个关键字,当有一个关键字集合时,想发现文本中所有出现关键词的位置,或者检查是否有关键字集合中的任何关键词出现在文本中时,可用使用Aho-Corasick算法。
Aho-Corasick算法是多模式匹配中的经典算法,目前在实际应用中较多。
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
相关推荐
该算法的核心是构建Aho-Corasick自动机(AC自动机),这是一种特殊的确定性有限状态自动机(DFA)。 1. **多模式匹配**: 多模式匹配问题是指在给定的文本中寻找一组模式串的所有出现位置。在传统的一对一匹配中,...
### 多字符匹配算法——Aho-Corasick算法详解 #### 一、引言与背景 在信息检索和文本编辑应用中,快速定位用户指定的单词或短语的所有出现位置是一项基本需求。针对这一需求,《高效的匹配算法:对文献搜索的帮助...
AC自动机,全称为Aho-Corasick算法,是由Aho和Corasick在1975年提出的,主要用于字符串的多模式匹配。它在KMP算法的基础上进行了扩展,能够一次性处理多个模式串,极大地提高了在文本中查找多个目标字符串的效率。 ...
AC自动机,全称为Aho-Corasick自动机,是一种高效的多模式字符串匹配算法。它由Alfred V. Aho和Margaret J. Corasick在1975年提出,并在贝尔实验室首次发布。AC自动机主要用于解决在一个主文本中寻找多个模式串的...
### 多模式串匹配之AC自动机算法 #### 一、概述 AC自动机算法,又称Aho-Corasick算法,是由Alfred V. Aho和Margaret J. Corasick于1975年在贝尔实验室提出的一种高效的多模式字符串匹配算法。这种算法能够在一个...
接着,我们转向AC自动机,这是一种更高效的多模式匹配算法。由Aho、Corasick两位科学家提出,AC自动机基于字典树(Trie)结构,能够一次性处理多个模式串的匹配问题。在构建AC自动机时,我们会为每个模式串添加一个...
本文将深入探讨“AC自动机”(Aho-Corasick 算法),这是一种高效的字符串匹配算法,它能一次性处理多个模式字符串。我们将通过"acmain_curvewde_算法_AC自动机_"这个主题,详细解析AC自动机的工作原理,并以acmain....
AC自动机,也称为Aho-Corasick算法,是一种用于多个关键词搜索的高效算法。与KMP算法专注于单一模式串匹配不同,AC自动机能够在文本中同时查找多个关键词的存在。它通过构建一棵树形结构(通常称为字典树或Trie树)...
AC自动机是一种高效的多模式字符串匹配算法,它通过结合关键词树和附加的信息结构,实现了对多个模式串的快速匹配。与传统的模式匹配算法相比,AC自动机不仅具有较高的匹配效率,还能一次性处理多个模式串,非常适合...
### AC自动机详解及其在生物序列算法中的应用 #### 一、引言 AC自动机,也称为Aho-Corasick算法,是一种经典的字符串搜索算法,由Alfred V. Aho与Margaret J. Corasick于1975年提出。该算法主要用于在一个文本串中...
**AC自动机(Aho-Corasick Automaton)详解** AC自动机是一种字符串搜索算法,由艾伦·科拉斯和高德纳在1975年提出,它结合了KMP算法和 Trie 数据结构,极大地提高了在一个文本中查找多个模式字符串的效率。在...
AC自动机,全称为Aho-Corasick字符串匹配算法,是一种在大量文本中查找多个模式(关键字)的高效方法。这个算法是由Aho和Corasick在1975年提出的,主要解决了KMP算法在处理多个模式串时效率低下的问题。AC算法的核心...
AC-BM算法,全称为阿科斯塔-伯特曼(Aho-Corasick)-布伦南-莫里斯(Brennan-Morris)算法,是一种在文本中快速查找多个模式串(Pattern)出现位置的字符串搜索算法。这个算法的核心思想是构建一个自动机结构,使得...
Aho-Corasick算法由艾兹格·A·霍拉日克和戈登·科拉斯克在1975年提出,它是在多个模式匹配问题上的一种显著优化,尤其是在大规模数据集上查找多个关键词时。该算法基于前缀树(也称为Trie树)的数据结构,可以一次...
- 更高效的算法如Aho-Corasick算法,构建自动机结构,一次遍历中同时匹配多个模式。 - BM(Boyer-Moore)算法和其变种Horspool算法,利用坏字符规则和好后缀规则,跳过大量无用字符,尤其适合长模式串的搜索。 2....
**AC自动机**全称为Aho-Corasick自动机,由Alfred V. Aho和Margaret J. Corasick于1975年提出。这种自动机可以看作是由一系列状态组成的有向图,每个状态对应于一个模式串或模式串的前缀,并且具有指向其他状态的边...
AC算法是由Aho和Corasick在1975年提出的一种多模式字符串匹配算法。该算法通过构建一个有限状态自动机(通常称为AC自动机)来实现对多个模式串的高效匹配。AC自动机的构建过程包括两个主要步骤:构建基本的模式树和...
AC自动机(Aho-Corasick算法,简称AC算法)是一种高效的多模式匹配算法,能够在文本中一次性查找多个模式串的存在。本文将详细探讨AC算法的实现原理及其在`pd_acsm.c`、`actest.c`和`pd_acsm.h`三个文件中的应用。 ...
- **自动机**:使用了Aho-Corasick(Automaton)自动机和Boyer-Moore(BM)算法,优化了搜索效率。 - **正则表达式**:Hyperscan基于正则表达式构建匹配规则。 ### Hyperscan介绍 - **块模式(Block Mode)**:适用于...