01 2018 档案
摘要:概述 后缀自动机是一类确定性有限自动机,其可以以O(n)的时空复杂度在长度为n的模式串P上进行编译,得到的则是Suffix Automaton,即后缀自动机。后缀自动机可以在O(m)的时间复杂度内判别长度为m的串是否是P的子串,是否是P的后缀。 理论部分 后缀自动机实际上是一副有向图,我们从起点st
阅读全文
摘要:莫队算法是由之前的国家队队长莫涛发明,故称为莫队算法。其用于处于静态区间查询。 区间莫队 对于区间查询,我们一般会使用主席树或树套树之类吊炸天的数据结构来进行处理。这是基于我们可以对区间进行二分,并通过分治的方式保证拥有对数级别的性能。当然前提是查询的内容要适合进行分治处理,对于形如最大值最小值,分
阅读全文
摘要:A*算法是一类贪心算法,其可以用于寻找最优路径。我们可以利用A*算法来求第k短路径。 一条路径可以由两部分组成,第一部分是一个从出发到达任意点的任意路径,而第二部分是从第一部分的末端出发,到终点的最短路径。两部分正好可以组成一条路径,且每一条路径都可以分解这两部分(允许任意一部分为空)。因此当我们已
阅读全文
摘要:对于一个无向带边权连通图G(V,E),我们一定能从中提取出最小生成树,那么对于次小生成树该如何获取?记图G中有效生成树集合为Z,而T为G的中的总权重最小的生成树,那么G\{T}中总权重最小的树就是次小生成树。 我们不妨先考虑这样一个问题,记T为图G中的最小生成树,由于生成树由|V|-1条边唯一决定,
阅读全文
摘要:概述 AC自动机全称Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法。 考虑这样一个场景,给出L个模式字符串(加总长度为N),以及长度为M大文本,要求从大文本中提取每个模式字符串出现的位置。如果使用KMP算法,时间复杂度将达到O(LM+N),而使
阅读全文
摘要:概述 LCT树是一类动态树,其用于动态维护多个连通无环图之间的关系,允许动态删除边或者增加边(新增的边不允许构成环)。在我眼中,LCT是类似线段树和Splay树的万金油数据结构,非常强悍,值得一学。LCT的所有操作的摊还时间复杂度均为O(log2(n)),其甚至优于更加简单的树链剖分。 算法说明 假
阅读全文
摘要:问题是这样的:对于一株树(无向无环连通图),为每个结点分配对应的权重。要求能高效计算任意两个结点之间的路径的各类信息,其中包括路径长度(路径上所有结点的权重加总),路径中最大权重,最小权重等等。到这里一切都还是比较简单的,我们可以利用Tarjan的LCA算法在线性时间复杂度内快速求解。但是如果还要求
阅读全文
摘要:简述 Splay树是一种二叉查找平衡树,其又名伸展树,缘由是对其进行任意操作,树的内部结构都会发生类似伸张的动作,换言之,其读和写操作都会修改树的结构。Splay树拥有和其它二叉查找平衡树一致的读写时间复杂度O(log2(n))。Splay树的优点是实现简单(苦于红黑树的小伙伴有福了),并且功能异常
阅读全文