摘要: 概述 AC自动机全称Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法。 考虑这样一个场景,给出L个模式字符串(加总长度为N),以及长度为M大文本,要求从大文本中提取每个模式字符串出现的位置。如果使用KMP算法,时间复杂度将达到O(LM+N),而使 阅读全文
posted @ 2018-01-11 21:59 cccwiseee 阅读(4324) 评论(0) 推荐(1) 编辑
摘要: 概述 LCT树是一类动态树,其用于动态维护多个连通无环图之间的关系,允许动态删除边或者增加边(新增的边不允许构成环)。在我眼中,LCT是类似线段树和Splay树的万金油数据结构,非常强悍,值得一学。LCT的所有操作的摊还时间复杂度均为O(log2(n)),其甚至优于更加简单的树链剖分。 算法说明 假 阅读全文
posted @ 2018-01-10 21:12 cccwiseee 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 问题是这样的:对于一株树(无向无环连通图),为每个结点分配对应的权重。要求能高效计算任意两个结点之间的路径的各类信息,其中包括路径长度(路径上所有结点的权重加总),路径中最大权重,最小权重等等。到这里一切都还是比较简单的,我们可以利用Tarjan的LCA算法在线性时间复杂度内快速求解。但是如果还要求 阅读全文
posted @ 2018-01-05 20:34 cccwiseee 阅读(1184) 评论(1) 推荐(1) 编辑
摘要: 简述 Splay树是一种二叉查找平衡树,其又名伸展树,缘由是对其进行任意操作,树的内部结构都会发生类似伸张的动作,换言之,其读和写操作都会修改树的结构。Splay树拥有和其它二叉查找平衡树一致的读写时间复杂度O(log2(n))。Splay树的优点是实现简单(苦于红黑树的小伙伴有福了),并且功能异常 阅读全文
posted @ 2018-01-01 15:58 cccwiseee 阅读(2317) 评论(1) 推荐(0) 编辑
摘要: SPFA全称Shortest path faster algorithm算法,用于在一个带权图中搜索单源最短路径。SPFA是基于Bellman-Ford算法的,只是在原有的基础上做了优化,但是时间复杂度是没有改变的,还是O(VE)。 在图G(V,E)上运行Bellman-Ford算法,需要执行总共V 阅读全文
posted @ 2017-12-15 23:48 cccwiseee 阅读(745) 评论(0) 推荐(0) 编辑
摘要: 今天学习了一下后缀数组,感觉是一个较为复杂且精细的数据结构,要理解它最好只抓一些关键的部分。 首先后缀数组是建立在一个字符串上的数据结构,其存储的元素是字符串的所有后缀,譬如'abc'的后缀有'c','bc','abc',其起始下标分别为2,1,0。要存储所有的后缀显然需要花费O(n^2)级别的空间 阅读全文
posted @ 2017-12-13 23:20 cccwiseee 阅读(422) 评论(0) 推荐(0) 编辑
摘要: 我们希望建立这样一株二叉树,其叶结点为一组给定的带权结点,称这个树的权重为每个叶子结点到根结点的距离与其权值的乘积的累和,即 $$ T.w=\sum_{x\ is\ leaf\ of\ T}^{}{x.w\cdot x.d} $$ 其中x.w表示叶结点的权重,而x.d为叶结点的深度。哈夫曼树是所有满 阅读全文
posted @ 2017-12-07 23:19 cccwiseee 阅读(5858) 评论(0) 推荐(0) 编辑
摘要: ISAP全称Improved Shortest Augmenting Path,意指在SAP算法进行优化。SAP即Edmonds-Karp算法,其具体思路是通过不断向残存网络推送流量来计算整个网络的最大流。阅读本文要求掌握网络流的基础概念,不懂的出门左拐算法导论。ISAP的时间复杂度与EK算法一致, 阅读全文
posted @ 2017-12-01 23:20 cccwiseee 阅读(2524) 评论(0) 推荐(0) 编辑
摘要: LCA(Least Common Ancestors)是指树结构中两个结点的最低的公共祖先。而LCA算法则是用于求两个结点的LCA。当只需要求一对结点的LCA时,我们很容易可以利用递归算法在O(n)的时间复杂度内实现,其中n为树中的结点数目。但是有时候我们会要求计算多组结点对各自的LCA,这样总的时 阅读全文
posted @ 2017-11-29 21:30 cccwiseee 阅读(922) 评论(0) 推荐(0) 编辑
摘要: Tarjan算法用于寻找图G(V,E)中的所有强连通分量,其时间复杂度为O(|V|+|E|)。 所谓强连通分量就是V的某个极大子集,其中任意两个结点u,v在图中都存在一条从u到v的路径。 Tarjan的算法的流程是通过深度优先搜索遍历每个顶点,并且维护以下属性dfn,low,instk,p其中dfn 阅读全文
posted @ 2017-11-28 23:27 cccwiseee 阅读(429) 评论(0) 推荐(0) 编辑