AC算法在文本匹配中的应用|谛听安全智能审核

AC算法是由Alfred V.Aho和Margaret J.Corasick提出的多模式匹配算法,能在O(n)的时间复杂度内完成匹配。该算法基于Trie树构建自动机,通过goto、failure和output表实现状态转移,避免回溯,提高效率。AC自动机在处理大量关键词匹配时具有显著优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文作者:L_Leisure,行者AI工作室;转载请注明来源;

背景

在工作中需要对一些 违禁词进行拦截,实际应用场景中,需保证匹配过程在数百毫秒内给出结果。因此,如何快速,准确的识别文本中是否包含了这些关键词就变得尤为重要。

对于上述问题我们描述为以下形式。

给定关键词集合P={p1,p2,……,pk},在目标串T[1…m]中找到出现了哪些关键词。

最容易想到的方法就是针对每个单词去匹配一遍,最后总结出都哪些单词匹配成功。

考虑KMP算法,单个关键词匹配的时间复杂度是O(|pk|+m),所以,所有关键词都匹配一遍的时间复杂度为O(|p1|+m+|p2|+m+…+|pk|+m)。令n=|p1|+…+|pk|,上式化简为O(n+km),因此,当关键词的数量变得非常多时,这种算法就变得无法忍受了。

Alfred V.Aho和Margaret J.Corasick在1974年提出了一个经典的多模式匹配算法-AC算法,这个算法可以保证对于给定的长度为n的文本,和模式集合P{p1,p2,…pm},在O(n)的时间复杂度内找到文本中的所有目标模式,而与模式集合的规模m无关。

1. AC算法详解

AC自动机的基础是Trie树, 和Trie树不同的是,树中的每个结点除了有指向孩子的指针,根据被查找的目标字段开始往叶子节点逐字符匹配。在这个过程中,如果发生失配,要根据失配跳转点进行跳转,如果找到匹配的模式串则进行打印输出。AC算法在扫描文本时完全不需要回溯,如果只考虑匹配的过程,该算法的时间复杂度为O(n),也就是只跟待匹配文本的长度相关

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谛听安全

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值