算法总结
文章平均质量分 78
dyx心心
这个作者很懒,什么都没留下…
展开
-
划分树小结
最近学习了一下划分树,下面总结一下。我们在求区间最值的时候,一般可以用线段树解决,但是如果要求区间第k小或者第k大值的话线段树就有点力不从心了,这是我们可以用划分树来解决。划分树利用了快速排序的思想,首先是建树,我们设当前区间的中位数为mid,(为了能快速找到区间的中位数,我们一般先对原序列做一次排序)则我们将区间中比mid小的放入左子树,将区间中比mid大数的放入右子树中,和mid相等的要讨原创 2013-03-28 16:37:46 · 2139 阅读 · 0 评论 -
LCA的树链剖分实现
这篇本来是要在树链剖分小节中写的,但是我感觉这只是树链剖分的一个衍生物,所以另开了一篇,如果对树链剖分部分还不是太了解,请看上面的链接。计算树中两个节点的最近公共祖先,我们一般有爬山法,Tarjan离线算法,或者是将LCA转换成RMQ来解,这里讲一讲一种新的求LCA的算法,它是基于树链剖分的。我们先来复习一下树链剖分中各个节点所维护的信息:1:siz[v]表示以v为根的子树的节点总数。原创 2013-03-25 17:55:09 · 2783 阅读 · 0 评论 -
树链剖分小节
前段时间学习了下树链剖分,好久没看了,今天又复习一遍,赶紧写下来,别又忘了。我们在信息学竞赛中,有时会碰到这么一类题型,在一棵树中,修改两点之间路径上的所有边(或点)上的某个变量(如边的长度,点的权值等等),然后询问单个点(或边)或者两点之间路径上的所有点(或边)的某些性质(如边权之和,最大边最小边等等)。对于这样的题,往往容易往线段树上去靠,但是,单单是用线段树是无法维护每一条链的性质的,所原创 2013-03-25 17:57:15 · 4007 阅读 · 0 评论 -
kmp算法总结
搞ACM也有三年了,期间学习了不少算法,到12月把上海站打完也要成退役狗了。最近突然想把学过的一些算法回过头来好好总结一下,于是就有了我的算法总结系列。这是这个系列的开端,所以先写一个简单点的算法,以后会慢慢复习一些复杂的算法,最后还是希望自己能够坚持下去吧。KMP算法KMP算法是一种线性时间复杂度的字符串匹配算法,它是对BF(Brute-Force,最基本的字符串匹配算法)的改进。对原创 2014-11-20 16:00:16 · 10034 阅读 · 5 评论 -
Manacher算法总结
Manacher算法算法总结第三弹 manacher算法,前面讲了两个字符串相算法——kmp和拓展kmp,这次来还是来总结一个字符串算法,manacher算法,我习惯叫他 “马拉车”算法。相对于前面介绍的两个算法,Manacher算法的应用范围要狭窄得多,但是它的思想和Z算法有很多共通支出,所以在这里介绍一下。Manacher算法是查找一个字符串的最长回文子串的线性算法。在介绍算法原创 2014-12-21 16:10:27 · 43925 阅读 · 39 评论 -
拓展kmp算法总结
算法总结第二弹,上次总结了下kmp,这次就来拓展kmp吧。拓展kmp算法是对KMP算法的扩展,它解决如下问题:定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0注意到,如果有一个位置extend[i]=m,则表示T在S中出现,而且是在原创 2014-12-09 22:02:46 · 25301 阅读 · 15 评论 -
trie树总结
Trie树Trie树,又称字典树,是字典的一种存储方式,字典中的每一个单词在Trie树种体现为从根节点出发的路径,路径中每条边代表一个字母,将边连接起来便形成了对应的单词,如图,就是一颗Trie树,其中存储了ab,ac,bc,c,cd五个单词(其中加粗节点表示单词结尾节点)。一:Trie树的基本概念Trie树是由链接的节点所组成的数据原创 2014-12-27 19:49:21 · 1720 阅读 · 0 评论 -
最小生成树算法总结
算法总结第5弹,最小生成树,有关生成树的问题有很多,这里先介绍个最常用的吧。最小生成树首先,生成树是建立在无向图中的,对于有向图,则没有生成树的概念,所以接下来讨论的图均默认为无向图。对于一个有n个点的图,最少需要n-1条边使得这n个点联通,由这n-1条边组成的子图则称为原图的生成树。一般来说,一个图的生成树并不是唯一的(除非原图本身就是一棵树)。现在考虑带权图G,即图的边带权,则原创 2014-12-30 14:58:31 · 15550 阅读 · 2 评论