AC自动机 (Aho-Corasick) 浅显易懂

AC自动机是一种用于模式匹配的算法,适用于处理多个模式串的情况。它结合了字典树(Trie树)和KMP算法的思想,通过构建失配指针实现高效查找。在AC自动机中,当匹配失败时,会利用失配指针迅速跳转到可能匹配的位置,大大减少了重复比较。算法主要包括构造Trie树、构建失配指针和模式匹配三个步骤。
摘要由CSDN通过智能技术生成

咸鱼:你听过AC自动机吗?

不想吃WA的咸鱼:AC自动机,什么魔鬼?一脸茫然.jpg

咸鱼:AC自动机你不知道吗,就是一个算法模板,把这个模板提交到VJ上的任何题目都能自动AC。

不想吃WA的咸鱼:哇!好厉害,赶紧来学一手,这样我就能A掉VJ上的所有题还不吃WA。

在模式匹配问题中,如果模式串有多个,KMP算法就不合适了,因为每次要匹配一个模式串,就要遍历一遍文本串。我们想到KMP算法的状态转移图是利用前缀函数加失配的边匹配上的,如果我们把多个模式串也仿造KMP算法,构建为一个状态转移图不就行了吗,这就是著名的AC自动机了。那为了把所有的的模式串都存在一个状态图里,这时候字典树就排上用场了。注意到KMP的状态转移图是线性的字符串加上失配边组成的,可以猜到AC自动机是Trie加上失配的边组成的。

下图就是字符串{"SHE","HIS","HERS","FG"}所对应的Aho-Corasick自动机

从上图我们不难看出其实AC自动机还是在找自己的真后缀与其他模式串的前缀的过程,比如已经匹配上了字符串“SHE”,那么“HE”肯定也是能匹配上的,所以有一条91指向76的边而且为绿色,代表成功构建了失配指针。通俗一点来讲是这样的比如文本串T=“SHERS”,那么最先匹配上的依次是S,H,E,但是下一个R就匹配不上了,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值