SAM学习笔记&AC自动机复习】的更多相关文章

形势所迫,一个对字符串深恶痛绝的鸽子又来更新了. SAM 后缀自动机就是一个对于字符串所有后缀所建立起的自动机.一些优良的性质可以使其完成很多字符串的问题. 其核心主要在于每个节点的状态和$endpos$这个概念的结合:"状态"定义为从源点出发到达当前节点的所有字符串,$endpos$对于一个字符串它作为整个字符串子串的末尾的集合,而SAM则保证状态和相同的$endpos$集合构成一个一一映射. 容易证明在同一个状态的字符串互为后缀,记最长的那个为$longest(x)$,但是不保证所…
最先开始以为和自动刷题机是一个东西... 其实就是kmp的一个拓展.学完kmp再学这个就会发现其实不难 1.kmp是一个串匹配一个串,但是当我们想用多个串匹配一个文本的时候,kmp就不行了,因此我们有了AC自动机 2.很明显我们用单词去匹配文本是肯定要一个一个枚举单词去匹配的,那么我们换个思路,用文本去匹配串. 3.AC自动机的原理:我不是很懂,口胡一下: 1.建立一颗trie,读入单词后把单词一个一个插入到trie 3.进行文本匹配.把文本放到AC自动机上.想象一下:把AC自动机的root看成…
AC自动机可以看作是在Trie树上建立了fail指针,在这里可以看作fail链.如果u的fail链指向v,那么v的对应串一定是u对应串在所给定字符串集合的后缀集合中的最长的后缀. 我们考虑一下如何实现这个东西. 以上数组实现的过程中我们让0号结点充当了根,这样会省去很多边界的处理. 我们考虑如何用指针去实现AC自动机,这看起来要更加自然.在指针实现的过程中,为了严谨起见,我们定义:节点的ch指针在默认情况下为NULL,fail指针在默认情况下为root(根节点自身除外) 这样的话就更加严格,各种…
SAM学习笔记 后缀自动机(模板)NSUBSTR(Caioj1471 || SPOJ 8222) [题意] 给出一个字符串S(S<=250000),令F(x)表示S的所有长度为x的子串中,出现次数的最大值.求F(1)..F(Lengh(S)); [输入格式] 一个字符串 [输出格式] 依次输出答案 [样例输入] ababa [样例输出] 3 2 2 1 1 [算法分析] 相信大家在学习这个专题时已经接触过很多有关解决字符串问题的其它算法了.但是我们接下来要学的这个专题对于解决字符串的一系列难题都…
mybatis学习笔记之基础复习(3) mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己编写, 但是mybatis也是有映射(输入参数映射.输出结果映射) mybatis入门门槛不高,学习成本低,让程序员把精力放在sql语句上,对sql语句优化非常方便, 适用于需求变化较多项目,比如互联网项目. mybatis框架执行过程: 1.配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2.通过配置文件,…
最近学了SAM已经SAM的比较简单的应用,SAM确实不好理解呀,记录一下. 这里提一下后缀自动机比较重要的性质: 1,SAM的点数和边数都是O(n)级别的,但是空间开两倍. 2,SAM每个结点代表一个endpos,每个endpos有可能代表多个字串(当然这些字串的endpos相等),且这些字串的长度呈一个梯形. 3,令tree[x].len为点x代表的所有字串中长度最长的,tree[x].short为最短的,那么tree[x].short=(tree[fa].len)+1,根据这条性质其实tre…
前言(2019.1.6) 已经是二周目了呢... 之前还是有一些东西没有理解到位 重新写一下吧 后缀自动机的一些基本概念 参考资料和例子 from hihocoder DZYO神仙翻译的神仙论文 简而言之,后缀自动机(SAM),是一个有限状态自动机(DFA) SAM分为两个部分,一部分是一个Dag,另一部分是Parent树.--laofu 搬一个图下来(这是字符串\(aabbabd\)的\(SAM\)) 后缀自动机的DAG部分 后缀的\(Dag\)(有向无环图)部分由状态和转移函数构成, 状态表…
前言 后缀自动机是一个强大的数据结构,能够解决很多字符串相关的(String-related)问题. 例如:他可以查询一个字符串在另一个字符串中出现的所有子串,以及查询一个字符串中本质不同的字符串的个数. 后缀自动机可以理解为一个字符串的所有子串的压缩图,对于一个长度为\(n\)的字符串,它只需要\(O(n)\)的空间,以及\(O(n)\)的时间进行在线搭建(如果我们把字符集视作常数).如果我们把字符集视作变量\(k\),那么他的空间复杂度和时间复杂度都可以做到\(O(nlogk)\).后缀自动…
好抽象啊,早上看了两个多小时才看懂,\(\%\%\%Fading\) 早就懂了 讲解就算了吧--可以去看看其他人的博客 1.[模板]后缀自动机 \(siz\) 为该串出现的次数,\(l\) 为子串长度,每次乘一下就好了 \(Code\ Below:\) #include <bits/stdc++.h> #define ll long long using namespace std; const int maxn=2000000+10; int n,a[maxn],c[maxn],last,c…
第一天:Linux命令 vim操作 第二天:数据类型 运算符 顺序语句第三天:分支语句 循环语句第四天:循环语句 数组第五天:数组第六天:指针第七天:函数 数组与指针第八天:数组指针第九天:递归 第十天:结构体 嵌入式------->软件控制硬件 windows 闭源的Linux 开源的 Linux的常用版本ubuntucentOSredhat VM:虚拟机 虚拟一台PC Linux是一个开源的.多用户的.多任务的.要求必须要以用户名和密码去登录. 1.Linux常用命令(命令名称 选项 还有参…
1.计算机的数值表示 数值类型和非数值类型 二进制 0,1 (0b1001) 八进制 0~7   (0146) 十进制 0~9 十六进制 0~f (0x3f) 八进制转二进制-->一位八进制数换三位二进制数.0124----->001 010 100 2.数据类型 数据类型作用:决定变量在内存空间占的内存大小 内存的基本单位:字节(byte) 内存的最小单位:比特(bit) 1 byte = 8 bit 基本数据类型:(32位系统OS) 整型家族 int (4 byte) unsigned i…
这章对现在的我来说有点难,要是不写点东西,三天后怕是就一无所有了. 但写这个没有营养的blog的目的真的不是做题或提升,只是学习学习代码和理解一些概念. 现在对AC自动机的理解还十分浅薄,这里先贴上目前我看过的文章: 深入理解Aho-Corasick自动机算法 AC 自动机学习笔记 AC自动机相比Trie多了失配边,结点到结点间的状态转移,结点到根的状态转移. 这里fail的定义是:使当前字符失配时跳转到另一段从root开始每一个字符都与当前已匹配字符段某一个后缀完全相同且长度最大的位置继续匹配…
第三波,走起~~ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅰ FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ 单位根反演 今天打多校时 1002 被卡科技了--赛场上看出来是个单位根反演但不会,所以只好现学这东西了( 首先你得知道单位根是什么东西,对于 \(n\) 次方程 \(x^n-1=0(x\in\mathbb{C})\),在复数域上有 \(n\) 个根,其对应到复平面上就是单位圆的 \(n\) 等分点,我们将这些单位根从 \(x\) 轴正半轴开始顺时针依次…
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的皮毛, 然后就做别的事去了, 等回头再来看WPF的时候, 哈忘记了~ 于是写个例子补一下, 在继续学习Binding. 1, 首先准备好一个类 public class Hero { public Hero(int id, string name, string skill, bool hasM)…
题目大意:输入几个子串,然后输入一个母串,问在母串里面包含几个子串.   分析:刚学习的AC自动机,据说这是个最基础的模板题,所以也是用了最基本的写法来完成的,当然也借鉴了别人的代码思想,确实是个很神奇的东西,如果不懂KMP的话,最好先学学KMP再来学这个,会理解的更深刻一些.   代码如下: ======================================================================================================…
最近学习了AC自动机,做了notonlysuccess大牛里面的题,也该来个总结了. AC自动机(Aho-Corasick Automaton)在1975年产生于贝尔实验室,是著名的多模匹配算法之一. 至于算法的讲解,notonlysuucess大牛极力推荐 http://www.cs.uku.fi/~kilpelai/BSA05/lectures/slides04.pdfhttp://www.docin.com/p-46845432.html(上边原文地址如果无法访问的话可以访问这一个~) 我…
fzu 2246(ac 自动机) 题意: 某一天YellowStar学习了AC自动机,可以解决多模式匹配问题.YellowStart当然不会满足于此,它想进行更深入的研究. YellowStart有一个母串\(S\),以及\(m\)个询问串\(T\),它发现如果把母串删除掉一个子串,把剩余的串按原先顺序拼接起来,某些询问串\(T\)就可能出现在这个新的母串中. 现在,对于第\(i\)个询问串\(T_i\),YellowStar想知道,母串最多可以删除多长的子串,使得该询问串出现在新的母串的子串中…
纯JS实现KeyboardNav(学习笔记)一 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 GitHub项目源码 预览地址 最终效果 KeyboardNav使用指南: 左下角为网站的icon,'.'代表网站无icon或未设置网站 按键盘上相应的按键进入对应网站 鼠标放上去可编辑并保存网站,除了初始网站,用户编辑的网站存在本地cookies 清空cookies后保存在本地的网站将被清除,还原会初始状态 数据结构的使用 哈希,数组做出来导航页面 实际上数组就是ha…
纯JS实现KeyboardNav(学习笔记)二 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 这篇主要是添加css,优化js编写逻辑和代码排版 GitHub项目源码 预览地址 最终效果 KeyboardNav使用指南: 左下角为网站的icon,'.'代表网站无icon或未设置网站 按键盘上相应的按键进入对应网站 鼠标放上去可编辑并保存网站,除了初始网站,用户编辑的网站存在本地cookies 清空cookies后保存在本地的网站将被清除,还原会初始状态 CSS样式…
目录 定义 SAM 的状态集 一些性质 SAM 的后缀链接 SAM 的转移函数 一些性质 算法构造 构造方法 时间复杂度证明 状态的数量 转移的数量 代码实现 实际应用 统计本质不同的子串个数 计算任意子串出现次数 统计所有本质不同子串的权值和 求循环串在原串中出现次数 SAM 上博弈与 trans 上查询 题意 题解 此篇博客大部分内容来自于 hihoCoder , 借此学习 !! (侵删) 主要是上面讲的通俗易懂qwq 本文只是将其用更好的格式进行展现,希望对读者有帮助. 而且以后博客的 m…
我是连月更都做不到的蒟蒻博主QwQ 考虑到我太菜了,考完noip就要退役了,所以我决定还是把博客的倒数第二篇博客给写了,也算是填了一个坑吧.(最后一篇?当然是悲怆のnoip退役记啦QAQ) 所以我们今天学习的是AC自动机的Trie图和last优化.如果不知道什么是AC自动机,建议看一看我的上一篇博客:AC自动机学习笔记1 Trie图 上次我们说到朴素的AC自动机的时间复杂度是布星的,原因如下: 匹配时因为每次都要跳fail边,复杂度上界可以达到 $ O(ml) $ 而Tire图就是用来解决这种问…
想知道484每个萌新oier在最初知道AC自动机的时候都会理解为自动AC稽什么的,,,反正我记得我当初刚知道这个东西的时候,我以为是什么神仙东西,,,(好趴虽然确实是个对菜菜灵巧比较难理解的神仙知识点了QAQ 首先要学AC自动机,就要先学会俩知识点: trie树和kmp(我记得我都写了学习笔记,,,然而写得太烂了不想放上来了,,,网上随便搜篇题解都写得比我好的样子TT 好的那就当做已经掌握了这俩了来学习AC自动机趴! 首先要知道AC自动机是解决什么东西的嘛QwQ kmp是一对一嘛,就是说一个字符…
虽然 NOIp 原地爆炸了,目前进入 AFO 状态,但感觉省选还是要冲一把,所以现在又来开始颓字符串辣 首先先复习一个很早很早就学过但忘记的算法--自动 AC AC自动机. AC 自动机能够在 \(\mathcal O(\sum|s|)\) 的时间内解决多模式串的问题,你可以理解为它把 KMP 放在了 trie 树上. 举个例子,\(S=\{"abc","bcd","cd"\},T="abcdbc"\). 首先建出 trie…
用途 AC自动机适用于一类用多个子串在模板串中匹配的字符串问题. 也就是说先给出一个模板串,然后给出一些子串.要求有多少个子串在这个模板串中出现过. KMP与trie树 其实AC自动机就是KMP与trie的结合版.或者说是在trie上进行的kmp算法.所以学会kmp和trie是学习AC自动机的基础. 对于上面那类问题.可以对于每个子串都用kmp算法在母串中匹配一次.但是复杂度就成了\(n^2\) AC自动机 而对于这类问题,AC自动机的实现是先把所有的子串都挂到trie树上,然后在用母串去tri…
月更博主又来送温暖啦QwQ 今天我们学习的算法是AC自动机.AC自动机是解决字符串多模匹配问题的利器,而且代码也十分好打=w= 在这一篇博客里,我将讲解AC自动机是什么,以及怎么构建一个最朴素的AC自动机.(不知道为什么我写出来的AC自动机常数就是大得要命=.=) 前置知识 首先你一定要对Trie树以及KMP了如指掌,尤其是要明白KMP中失配数组(next或fail数组)的本质:利用已经匹配过的部分,跳过重复的匹配,达到快速匹配的目的. AC自动机是什么 大家都知道KMP可以用于在一个大字符串(…
发现已经忘了许多....于是复习一下 基础要点概况 AC 自动机基于 Trie 树 的结构,即构建 AC 自动机前需要先建 Trie. 一个状态中除了转移 \(\delta\) 之外还有失配指针 \(fail\).\(fail(x)\) 对于的字符串是 \(x\) 对应字符串的 最长真后缀. 要求出 \(fail\) 我们可以 bfs 实现.对于当前状态 \(x\),设其父亲 \(f\) 通过一个 \(c\) 转移连向 \(x\),那么我们先看看 \(fail(f)\) 是否存在 \(c\) 转…
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 58007 Accepted Submission(s): 19043 Problem Description In the modern time, Search engine came into the life of everybody like Goog…
AC自动机 ----多个模板的字符串匹配 字典树Trie加上失配边构成 插入操作:ac.insert(p[i],i);构造失配函数:ac.getFail();计算文本串T中每个模板串的匹配数:ac.find(T); 时间复杂度 O(n+km) (总长度) 以下是加过注释的LRJ模板: struct ACauto { ];// 字典树,类似于前向星,ch[i][j]为当前编号为i的结点,下一个字符为j的所指向的编号. int size; int f[MAXN],last[MAXN],val[MAX…
AC自动机(Aho-Corasick Automaton),虽然不能够帮你自动AC,但是真的还是非常神奇的一个数据结构.AC自动机用来处理多模式串匹配问题,可以看做是KMP(单模式串匹配问题)的升级版.常常见到这样的说法,AC自动机 = Trie树 + KMP. 原理初步 首先对于所有的模式串,我们先需要利用Trie树将其建起来.AC自动机最巧妙的部分在于失配指针(fail)的构建,也就类似KMP中的next数组,只不过现在变为了多模式串.在匹配的时候沿着trie树走,发现不匹配即跳转失配指针,…
话说AC自动机有什么用......我想要自动AC机 AC自动机简介:  首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.一个常见的例子就是给出n个单词,再给出一段包含m个字符的文 章,让你找出有多少个单词在文章里出现过.要搞懂AC自动机,先得有字典树Trie和KMP模式匹配算法的基础知识.KMP算法是单模式串的字符匹配算 法,AC自动机是多模式串的字符匹配算法. AC自动机的构造: 1.构造一棵Trie,作…