• 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自动机构成的转移是一张图,甚至还可以做邻接矩阵的乘法,搞矩乘加速
    许愿弥生改二
  • 相关阅读:
    js设置奇偶行数样式
    c#简单的调试信息、日志信息输出
    调用接口
    sql日期转换格式
    .net 常用方法
    日常验证
    Js 返回页面 or 跳转页面
    .NET Core Kestrel部署HTTPS以及Docker部署HTTPS
    Linux openssl生成证书
    ASP.NET Core中使用AutoMapper实现自动转化
  • 原文地址:https://www.cnblogs.com/LoveYayoi/p/6745487.html
Copyright © 2020-2023  润新知