• AC自动机


    AC自动机

    0x00 简介

    • 自动AC机(划去
    • AC自动机和SAM一样是一种有限状态自动机
    • 能够接受一堆字符串的前缀
    • 相当于是许多串上的KMP
    • 可以处理多串匹配的问题
    • 复杂度是线性的(乘上字符集大小)
    • 由于多串转移的特殊性可以做一些DP问题

    0x01 实现

    • 简而言之,就是在一个trie上的KMP
    • 维护一个fail指针,相当于KMP中的next数组
    • 先对一些串建trie,然后对trie进行BFS
    • 假设我们正在处理p这个节点
    • 遍历p的所有可能的转移c[w],如果某种转移合法
    • 我们考虑fail指针构成的链,从p开始的链上如果有一个点q有c[w]这个转移,那么c[w]->fail=q->c[w]
    • 正确性很显然
    • 也很好写
    • 在建fail指针过程中可以对转移进行压缩,把一条fail链压缩成一条边,注意要特判NULL的情况,具体实现看代码

    0x02 dp

    • 可以做一些什么不出现一些串的长度为l的串里有多少个啊什么的问题
    • 由于压缩后的AC自动机构成的转移是一张图,甚至还可以做邻接矩阵的乘法,搞矩乘加速
    许愿弥生改二
  • 相关阅读:
    分形之城
    【SDOI2011 第2轮 DAY1】消防 树上问题+二分+贪心
    【Usaco Nov08 Gold】玩具 三分+贪心
    分治 复习
    快读板子
    最小线段覆盖 C神奇项链
    比赛经验积累1
    字符串 专题
    界面小项目之W3C
    前端小基础
  • 原文地址:https://www.cnblogs.com/LoveYayoi/p/6745487.html
Copyright © 2020-2023  润新知