zoukankan      html  css  js  c++  java
  • AC自动机的一点理解

    (fail)指针:指向最长的在(tire)里出现的后缀

    (tire)多出来的子边:原来的(tire),我们失配后又得返回根结点再次匹配,而加入这些边后只需要花(strlen(s))就能实现所有匹配

    (tire)图:能跑到一个结点,该结点所代表的串能被文本串表示

    例题

    问题1:多个模式串,一个文本串,有几个模式串出现在文本串内

    做法:对于多个模式串建自动机,文本串匹配,匹配到的点及(fail)点的代表的串都在文本串中

    具体操作+优化:我们对于每个串的末端点(val_i)都记录代表几个串(建(trie)),在(trie)图中不变,然后每次匹配到的点往上爬并累加(val)值并标记,
    之后再爬的时候到过标记了的点就退出,则保证了时间复杂度

    问题2:多个模式串,一个文本串,求每个模式串出现的次数

    做法:对于多个模式串建自动机,文本串匹配,匹配到的点及(fail)点的代表的串都在文本串中,并让这些串次数都+1

    具体操作+优化:第一题我们用标记保证了时间复杂度,可这题需要得求每个串出现的次数,标记一下以后就找不到了怎么办?
    先把文本串匹配一下,经过的点记录值,然后用topsort来处理,按相当于键fail树从叶子节点往上传,这样就能得到每个点代表的串出现的次数
    最后再比较一下每个串的末节点出现的次数

  • 相关阅读:
    一个小时学会Git
    Git介绍,安装,Git+Git flow使用
    深度操作系统
    邮件模板定义
    每个程序员都应该知道的一些访问时延值
    C 盘的不速之客
    v14.0AspNetMicrosoft.Web.AspNet.Props 找不到
    WebAPI 2参数绑定方法
    VisualStudio 2015 开启IIS Express可以调试X64项目
    解决WINDOWS防火墙开启后Ping不通
  • 原文地址:https://www.cnblogs.com/y2823774827y/p/10297057.html
Copyright © 2011-2022 走看看