【手敲算法】AC自动机 从 理解 到 裸敲

为什么要学习 AC自动机

当 众多(n 个) "模式串 Ti" 需要确定 与 "母串S" 的相对关系时,
如果 使用 kmp 逐个进行 模式串Ti,与S串(lenS = n)匹配的匹配工作,单次复杂度 = O(n)
n个 Ti,则 复杂度 = O(n * n),此时需要 AC自动机,进行 "一对多" 的快速匹配
复杂度 = O(n +m) m是字符失配跳动的次数(小)

  • 相对关系:匹配了哪些 Ti串,匹配多少条 Ti串,匹配Ti 串多少次,等等 可以想到的种种变型算法

算法原理

AC自动机的 "fail指针" 与kmp的 "next数组" 有异曲同工之妙
next数组,是在失配后 直接跳到某个index下,因为kmp只有一条单链的字符串,可以直接用下标表示。
AC自动机,因为是树状结构,只能通过指针  来进行失配后的跳动操作。

  • 第一步:建立字典树(随机数据,后边举例会制造特殊数据)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值