##求循环串在原串中出现次数 ###解题思路: 实际上去找循环同构串在母串中的出现次数,用母串构建SAM,将给出的串比如abc变成abcab,那么我们对于循环同构串按位去在SAM中跳trans,如果能跳就跳,代表这以u为结尾的循环同构串在后缀自动机上到达的状态,如果有不能通过trans转移的话,那么 ...
分类:
其他好文 时间:
2020-07-01 22:26:30
阅读次数:
49
用于字符串匹配,其时间复杂度为O(n),具体原理就不搬了,这边给出PHP的实现代码: <?php class AcAutomation { private $root; public function __construct($keywords = array()) { $this->root = ...
分类:
Web程序 时间:
2020-06-29 13:28:38
阅读次数:
57
考场上随手构造了一组数据把自己卡掉了 然后一直都是掉线状态了。 最后发现这个东西不是subtask -1的情况不多 所以就没管无解直接莽 写题有点晚 故没调出来。。 考虑怎么做 容易想到建立AC自动机 然后不能跑到结尾节点 fail是结尾节点的也不能跑。 把那些节点抽出来就可以随便跑了 题目描述非常 ...
分类:
其他好文 时间:
2020-06-29 10:06:59
阅读次数:
53
本文对 AC 自动机的算法以及基础应用略作总结。 定义 AC 自动机在 Trie 上构造失配指针 状态 \(u\) 的失配指针 \(fail\) 指向状态 \(v\),即 \(v\) 是 \(u\) 在字典树所有状态集合中的最长后缀 转移边 \(trans\) 指向在当前对应串后续上一个字符能到达的 ...
分类:
编程语言 时间:
2020-06-27 09:54:58
阅读次数:
79
按顺序在一个序列的末尾插入数字,求每次插入后的本质不同子串个数 ...
分类:
其他好文 时间:
2020-06-22 23:19:14
阅读次数:
60
有了字典树的基础就可以学AC自动机惹(本蒟蒻学不会KMP) 前置技能:字典树 ...
分类:
其他好文 时间:
2020-06-22 17:19:47
阅读次数:
49
DFA的最小化 前面我们讲过NFA通过确定化能够得到DFA,现在我们看能不能让已经得到的DFA的状态数能不能再继续变小(minimise).其实也就是对优化再优化。 我们从NFA得到DFA的过程中有使用子集构造法。但是子集构造法的的状态数还是过多,达$2^n$ 个。现在我们的目的就是进一步减少状态数 ...
分类:
编程语言 时间:
2020-06-18 19:57:38
阅读次数:
102
非正则语言 NFA、\(\varepsilon-NFA\) 面向人构造系统 DFA面向机器构造系统 自动机理论非常完美!! 自动机的表述有纯数学形式的五元组形式(用来科学定义以及证明)、状态转移图(用来直观理解,也是一种数学工具)、状态转移表(编程用,用来定义数据结构比较好,面向计算机存储) 乔姆斯 ...
分类:
编程语言 时间:
2020-06-17 23:39:02
阅读次数:
80
正则语言 如果某个语言能被DFA识别,那么它就是正则的 例题1: 构造一个字母表为{0,1}的DFA,使其接受所有最多含有三个1的串。 例题2: 构造一个DFA,使其能够定义如下语言: ? L={010,1} \(\Sigma=\{0,1\}\) 处理不了的话,可以引入一个特殊状态——死状态Qdie ...
分类:
编程语言 时间:
2020-06-15 18:09:01
阅读次数:
99
形式语言与自动机 有穷自动机(有限自动机Finite Autometa) 自动机通常用 状态转移图 来表示。 从一个状态输入一个刺激得到另一个状态的过程。 软件工程里面的实时系统、复杂系统也用状态转移图来表示,因此状态转移图非常有用。 通过状态转移图,可以明确的描述某个系统 有穷自动机表示状态转移: ...
分类:
编程语言 时间:
2020-06-14 18:30:35
阅读次数:
58