【模式匹配】Aho-Corasick自动机

AC自动机(Aho-Corasick Automaton)是一种多模匹配算法,通过构建带有failure函数的有限状态机,实现了在主串中一次性匹配多个模式串的功能。该算法避免了对主串的重复扫描,提高了效率。AC自动机的核心包括goto、failure和output函数,其中failure函数是关键,用于匹配失败时的回溯。文章详细介绍了AC算法的原理、构造方法和实现,并提供了Python及Scala的实现代码。
摘要由CSDN通过智能技术生成

1. 多模匹配

AC自动机(Aho-Corasick Automaton)是多模匹配算法的一种。所谓多模匹配,是指在字符串匹配中,模式串有多个。前面所介绍的KMPBM为单模匹配,即模式串只有一个。假设主串\(T[1 \cdots m]\),模式串有k个\(\mathbb{P} = \{ P_1, \cdots, P_k\}\),且模式串集合的总长度为\(n\)。如果采用KMP来匹配多模式串,则算法复杂度为:

\[O(|P_1|+m+\cdots + |P_k|+m)=O(n+km) \]

而KMP并没有利用到模式串之间的重复字符结构信息,每一次的匹配都需要将主串从头至尾扫描一遍。贝尔实验室的Aho与Corasick于1975年基于有限状态机(finite state machines)提出AC自动机算法[1]。小插曲:实际上AC算法比KMP提出要早,KMP是1977年才被提出来了的。

2. AC算法

AC自动机

自动机由状态(数字标记的圆圈)和转换(带标签的箭头)组成,每一次转换对应一个字符。AC算法的核心包括三个函数:goto、failure、output;这三个函数构成了AC自动机。对于模式串{he, his, hers, she},goto函数表示字符按模式串的转移,暗含了模式串的共

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅唱书令

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

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

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

打赏作者

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

抵扣说明:

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

余额充值