AC自动机简单总结

AC自动机

#AC自动机


AC自动机为什么存在?或者说解决什么样的问题?
解决在一个大字符串中,找到多个候选字符串的问题

AC自动机算法核心

  1. 把所有匹配串生成一棵前缀树
  2. 前缀树节点增加fail指针
    关键在于fail指针的理解(网上帖子几乎没有解释)

fail指针含义:
如果必须以当前字符结尾,当前形成的路径是str,剩下哪一个字符串的前缀和str的后缀,拥有最大的匹配长度。fail指针就指向那个字符串的最后一个字符所对应的节点。

目前来到的节点,之前路径上的字符串记为str,除了str之外哪个前缀字符串,和str的后缀串匹配最大,fail指针就指向那个最大匹配串的最后字符底下的节点。

目前来到的节点,之前路径上的字符串记为str,除了str之外哪个前缀字符串,和str的后缀串匹配最大,fail指针就指向那个最大匹配串的最后字符底下的节点。

3)构建和使用建议去B站看视频看视频

总结

AC自动机建好以后, failed指针的含义也就相应的建好了
在匹配文章的时候, 如果你一直在成功, 你每到一个节点, 顺着
fail指针转一圈收集答案, 有黑的节点, 收集玩答案之后, 给它一个状态
下回再蹦就不要再蹦了
成功的时候, 我们的跳转看一遍是不该换门庭的, 你该在什么路径上还
在什么路径上, 只是转一圈而已, 每到一个节点都这么转一圈

但是失败的时候, 要顺着failed指针蹦到另外一条路径的节点上去

AC自动机适用场景

要求必须一股脑把候选串给出, build完fail指针再用, 不接受动态的增加候选串
也不接受AC自动机删掉东西
有可能能改进, 但它不是AC自动机原本的意思了

要想重新匹配大文章, 就得重新做新的AC自动机, 文章重新过

可以取代KMP, KMP是单串, AC自动机是多串

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr顺

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

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

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

打赏作者

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

抵扣说明:

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

余额充值