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

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

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

例题

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

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

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

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

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

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

AC自动机的一点理解的更多相关文章

  1. 【AC自动机】【树状数组】【dfs序】洛谷 P2414 [NOI2011]阿狸的打字机 题解

        这一题是对AC自动机的充分理解和树dfs序的巧妙运用. 题目背景 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机. 题目描述 打字机上只有28个按键,分别印有26个小写英文字母和' ...

  2. [POI2000]病毒 --- AC自动机

    [POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...

  3. 「刷题笔记」AC自动机

    自动AC机 Keywords Research 板子题,同luoguP3808,不过是多测. 然后多测不清空,\(MLE\)两行泪. 板子放一下 #include<bits/stdc++.h&g ...

  4. AC自动机自我理解和模板

    给出长度为m的文本 查询 n个单词出现的次数 用kmp 复杂度 n*m*(单词平均长度) 用字典树 复杂度 m*每次字典树遍历的平均深度) AC自动机 复杂度 m (思路可以理解为kmp+字典树 ) ...

  5. [Python] Spark平台下实现分布式AC自动机(一)

    转载请注明出处:http://www.cnblogs.com/kirai/ 作者:Kirai 零.问题的提出 最近希望在分布式平台上实现一个AC自动机,但是如何在这样的分布式平台上表示这样的非线性数据 ...

  6. AC自动机总结及板子(不带指针)

    蒟蒻最近想学个AC自动机简直被网上的板子搞疯了,随便点开一个都是带指针的,然而平时用到指针的时候并不多,看到这些代码也完全是看不懂的状态.只好在大概理解后自己脑补(yy)了一下AC自动机的代码,居然还 ...

  7. AC自动机讲解

    今天花了半天肝下AC自动机,总算啃下一块硬骨头,熬夜把博客赶出来.. 正如许多博客所说,AC自动机看似很难很妙,而事实上不难,但的确很妙.笼统地说,AC自动机=Trie+KMP,但是仅仅知道这个并没有 ...

  8. POJ 3691 DNA repair (DP+AC自动机)

    DNA repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4815   Accepted: 2237 Descri ...

  9. YBT 2.4 AC自动机

    其实这个专题NOIP几乎不考 AC自动机,就是能让题自动AC的东西,是不是十分神奇 对的,就是这么神奇 AC自动机是解决多模式串与文本串匹配的问题 是KMP+Trie树的结合,也是一个毒瘤算法 Key ...

随机推荐

  1. 利用CFAbsoluteTimeGetCurrent()计算时间差

    开发中,遇到计算时间差的问题,利用CFAbsoluteTimeGetCurrent()可以很方便的进行计算 实例: 场景:类似购物车中修改商品数量的功能,如下图所示,要求,修改完的数量,要同步到服务器 ...

  2. 企业级分布式存储应用与实战MogileFS、FastDFS

    项目实战9—企业级分布式存储应用与实战MogileFS.FastDFS   目录 实战一:企业级分布式存储应用与实战 mogilefs 实现 原理 1.环境准备 2.下载安装,每个机器都一样 3.数据 ...

  3. 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生

    [转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  4. ASP.NET CORE RAZOR :在 ASP.NET Core 中开始使用 Razor Pages

    来自:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/razor-pages-start 系统必备安装以下组件:. ...

  5. 利用$(window).resize()实现窗口大小自适应宽度问题

    © 版权声明:本文为博主原创文章,转载请注明出处 问题描述:利用iframe做页面引入,用$(window).resize()作自适应:结果窗口变小时,利用$(window).width()获取到的宽 ...

  6. EXTjs+SpringMVC+Mybatis实现照片的上传,下载,查看关键技术整理

    第一个问题:如何通过Extjs4实现照片上传的布局展示以及本地照片选择后的在一个区域内进行图片预览 实现照片上传的布局展示: items : [ { xtype : 'box', itemId : ' ...

  7. 《Lucene in Action 第二版》第三章节的学习总结----IndexSearcher以及Term和QueryParser

    本章节告诉我们怎么用搜索.通过这章节的学习,虽然搜索的内部原理不清楚,但是至少应该学会简单的编写搜索程序了本章节,需要掌握如下几个主要API1.IndexSearcher类:搜索索引的门户,发起者. ...

  8. /var/log目录下的Linux日志文件功能详解_转

    摘自:http://www.niaoyun.com/help/application/386.html 学习linux应该知道日志文件的所在位置以及它们包含的内容,在系统运行正常的情况下学习了解这些不 ...

  9. 【Python + Selenium】之unittest测试用例满足条件,进行跳过测试Skip

    直接上代码: __author__ = 'zc' import unittest class demoSkipTest(unittest.TestCase): a = 70 b = 50 print( ...

  10. 【Python + Mysql】之用pymysql库连接Mysql数据库并进行增删改查操作

    用pip下载pymysql并引用 具体请参考文章: <Python之MySQL数据库增删改查操作> <python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删 ...