ac自动机

字典树+kmp算法

  1. 遍历root节点所有子节点a b c,放入queue中,并且 a b c 的fail指向root
  2. 然后queue中移除一个节点c1,然后遍历c1的所有子节点 即d2,并加入到queue中,
  3. 如果c1.fail[d2]!=null说明有公共前缀,然后完成fail节点指向(c2节点指向c1节点)
  4. 如果==null说明没有公共前缀,就把fail指向root(d2节点)
  5. 依次递归,找完所有节点,即完成ac自动机的构建

构建字典树

root
c1
d2
f3
k4
c5
d6
f7
e3
b1
c2
d3
a1
b2
h3
a4
b5
c3
d4
e5
f6

遍历字典树

第一次遍历根节点的子节点,并且把fail指向root,把a b c 放入queue中

root
c1
d2
f3
k4
c5
d6
f7
e3
b1
c2
d3
a1
b2
h3
a4
b5
c3
d4
e5
f6

重queue中取出一个节点c1,遍历c1的子节点,得到d2,放入queue

root
c1
d2
f3
k4
c5
d6
f7
e3
b1
c2
d3
a1
b2
h3
a4
b5
c3
d4
e5
f6
root
c1
d2
f3
k4
c5
d6
f7
e3
b1
c2
d3
a1
b2
h3
a4
b5
c3
d4
e5
f6
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值