算法&数据结构总结By_ZZK
文章平均质量分 72
来自蒟蒻ZZK的算法总结,真的很弱。(已作废:P)
ZigZagK
一个蒟蒻。
展开
-
LCA-ST算法&Tarjan_LCA
定义树中两个节点x,y的最近公共祖先(Lowest Common Ancestors,简称LCA)指的是既是x祖先,又是y祖先且距离x和y最近的节点。ST算法(在线)我们有一个求x和y的LCA的初始想法:就是先让x和y中dep较大的节点与dep较小的节点处在同一深度,然后同时向上走,直到相遇,此时相遇的节点即为LCA: 复杂度为O(n∗Q)O(n*Q),并不是很好,我们需要优化。 初始想法很原创 2017-07-23 12:57:54 · 856 阅读 · 1 评论 -
2-SAT
定义2-SAT问题描述如下:有n个集合,每个集合里有两个元素且必须选一个,再给出若干条限制条件,比如选了i元素就不能j元素,求可行的选择方案。 ps:其实有k-SAT(k>=3)问题,但已经被证明是NPC问题,所以无视~分析首先我们要把给出的限制分析清楚。由于每个集合里有两个元素,所以如果某一个元素不能选,另一个就必须选。假设i集合的元素分别为2*(i-1),2*(i-1)+1(这两个元素可以相互原创 2017-07-15 21:58:21 · 3724 阅读 · 1 评论 -
强连通分量-Tarjan
作用Tarjan算法可以将强连通分量合并到该强连通分量的某一个点上,通俗地说就是实现环缩点。有向图的强连通分量有向图中,如果两个点i,j之间既有i->j的路径,又有j->i的路径,则i,j强连通。所有点都强连通的图是强连通图,一个有向图中的所有最大(就是不能再扩大了)的强连通子图都是这个有向图的强连通分量。 有时候我们不需要考虑强连通分量中的点,而是需要直接考虑整个强连通分量。这就需要我们找出图中原创 2017-07-07 19:10:37 · 527 阅读 · 4 评论 -
后缀自动机SAM
后缀自动机SAM总结。原创 2017-07-05 19:30:43 · 1778 阅读 · 3 评论 -
SBT
节点大小平衡树总结。原创 2017-06-29 19:55:00 · 1548 阅读 · 6 评论 -
二分图最佳完美匹配-KM算法
二分图最佳完美匹配-KM算法总结。原创 2017-05-31 08:17:01 · 10080 阅读 · 2 评论 -
【浅谈折半搜索】POJ1186[方程的解数]题解
【浅谈折半搜索】POJ1186题解。原创 2017-05-21 21:39:22 · 1229 阅读 · 4 评论 -
Manacher
作用线性时间解决最长回文子串问题。思想Manacher充分利用了回文的性质,从而达到线性时间。 首先先加一个小优化,就是在每两个字符(包括头尾)之间加没出现的字符(如%),这样所有字符串长度就都是奇数了,方便了很多。 abcde->%a%b%c%d%e% 记录p[i]表示i能向两边推(包括i)的最大距离,如果能求出p,则答案就是max(p)-1了(以i为中点的最长回文为...原创 2017-05-21 18:19:45 · 10762 阅读 · 2 评论 -
Link-Cut Tree
Link-Cut Tree总结。原创 2017-05-17 19:28:50 · 563 阅读 · 3 评论 -
二分图最大匹配-匈牙利算法
二分图最大匹配-匈牙利算法总结。原创 2017-05-11 18:54:59 · 1364 阅读 · 0 评论 -
【浅谈轮廓线DP】BZOJ1087(SCOI2005)[互不侵犯King]题解
【浅谈轮廓线DP】BZOJ1087题解。原创 2017-05-09 21:34:51 · 833 阅读 · 0 评论 -
A*和K短路
A*和K短路的总结。原创 2017-05-08 20:48:07 · 826 阅读 · 2 评论 -
莫队算法
莫对算法的总结。原创 2017-04-27 10:31:28 · 689 阅读 · 4 评论 -
cdq分治和整体二分
cdq分治和整体二分的简单应用。原创 2017-04-22 17:26:47 · 1585 阅读 · 2 评论 -
树状数组
树状数组总结。原创 2017-04-21 19:20:28 · 638 阅读 · 2 评论 -
树的分治-点分治
点分治的总结。原创 2017-04-19 20:36:21 · 2074 阅读 · 2 评论 -
树套树-线段树套线段树
线段树套线段树简单应用。原创 2017-04-17 20:36:06 · 4581 阅读 · 1 评论 -
树套树-线段树套平衡树
树套树-线段树套平衡树的总结。原创 2017-04-15 16:30:41 · 5063 阅读 · 2 评论 -
线段树
功能线段树是线段组成的(二叉)树,可以解决许多区间问题。因为他的灵活性和较高的效率(二叉树,效率为log2级别的),甚至常常可以取代树状数组和RMQ等区间算法(树状数组只能向上修改,向下取值,RMQ无法即时修正,而线段树这两个问题都可以解决)。需要注意的是线段分两种:不重叠和重叠(点和真正的线段)。下面以不重叠为例。1.建树首先tr[1].L肯定就是左端点,tr[1].R是右端点,然后就需要推左子树原创 2017-03-17 18:43:08 · 527 阅读 · 0 评论 -
线段树Lazy-tag
由来线段树求区间极值的时候,每次都需要修改包含在插入区间的所有节点,这样是不可能承受的!于是lazy思想也就是Lazy-tag是一个非常不错的优化。实现lazy思想的含义就是“要做的时候再做,不然不做”。这听起来不太可能,但实际上根据树的性质,这是可以实现的,只需要使用Lazy-tag: 对于一个节点,我们记录一个tag表示还没有传递下去的值(也就是操作时到这个节点停止了,后面没有遍历过),然后原创 2017-03-17 18:53:52 · 1286 阅读 · 0 评论 -
左偏树
可并堆:左偏树。原创 2017-04-02 13:15:12 · 745 阅读 · 0 评论 -
路径压缩&带权并查集
并查集的一些整理。原创 2017-04-02 23:44:35 · 1084 阅读 · 1 评论 -
主席树
主席树的总结。原创 2017-04-10 23:34:30 · 729 阅读 · 1 评论 -
KMP
问题从A串中找一个B串,我们首先想到的肯定是暴力。但是如果数据太大的话肯定不行。怎么办?KMP算法是一个很不错的选择。思想这个算法的核心是这样的,举个例子。 现在是对上的,那么我们继续看。 到这里再往下肯定就不行了,这时候我们怎么办呢?暴力的想法就是抛弃,重新来,而KMP的想法就是不抛弃!我们知道,想要不抛弃,肯定需要把某个j’摆上来和i对齐(当然j’要满足1~j’与原来匹配),这样原创 2017-03-11 16:21:14 · 460 阅读 · 0 评论 -
AC自动机
作用AC自动机全称Aho-Corasick自动机,这个算法是在KMP和trie的基础上得到的更优秀的字符串匹配算法(所以强烈建议先参考KMP和Trie)。实现KMP是线性的匹配,AC自动机呢?不难想到在trie里匹配! 比如有she,her,hers,his,him这几个单词,我们需要在一个本文中查找这些单词。使用KMP需要每个单词先处理失配函数,然后还要遍历这个文本n次(n表示单词数量),原创 2017-03-13 21:15:02 · 613 阅读 · 0 评论 -
LCP
LCP总结。原创 2017-03-14 19:24:30 · 4244 阅读 · 2 评论 -
后缀数组
后缀数组-倍增算法。原创 2017-03-14 19:19:48 · 662 阅读 · 0 评论 -
Trie
作用Trie是前缀树,通俗的来说就是一棵字符树,它的作用是把许多字符串整合储存,做成一个字符串集合,有时可以达到快速查找的效果(比如求多少个单词是一个句子的前缀)。实现比如有she,her,hers,his,him这几个单词,我们就可以建立这么一个Trie。 首先会发现Trie的一个特性:必有一个根节点(把根节点记为0)。然后每条边都有一个权值,权值即为字符(一般用取id的方法来当成权值)。原创 2017-03-11 17:02:46 · 932 阅读 · 5 评论 -
网络流-最小费用最大流
网络流-最小费用最大流总结。原创 2017-04-12 15:28:12 · 621 阅读 · 0 评论 -
网络流-最大流
网络流-最大流总结。原创 2017-04-11 20:22:25 · 552 阅读 · 3 评论 -
树链剖分
树链剖分-轻重链剖分原创 2017-03-24 09:03:04 · 391 阅读 · 1 评论 -
一些基础搜索算法的思想
ps:此博客是蒟蒻写的,可能并不是很正确。 再ps:该博客长期施工。搜索是暴力求解法的一种重要方法。就是通过不停的搜索将部分(甚至所有)情况找出,然后选出题目中需要的最优解。 ps:因为搜索算法好像没什么模板可言,所以下面只讲思想(其实就是我懒)。BFSBFS,广度优先搜索,是按照广度优先的一种搜索方法。思想利用队列,先把初始状态入队,然后每次取出队首,用队首搜索出所有由队首能够一步到达的状态并原创 2017-05-04 20:20:42 · 950 阅读 · 3 评论 -
斜率优化
f[i]=min{f[j]+a[i]|j<i}f[i]=min{f[j]+a[j]|j<i}f[i]=min{f[j]+a[i]+a[j]|j<i}像上面这些 i 的信息和 j 的信息不相关的线性DP,用堆,单调栈,线段树等都可以进行优化,但是如果 i 的信息和 j 的信息相关,比如:f[i]=min{f[j]+(a[i]−a[j])2|j<i}就不能用普通的方法优化了,这时候需要用到斜率优化。原创 2017-03-27 19:46:38 · 1019 阅读 · 1 评论 -
Treap
旋转Treap的总结。原创 2017-03-03 20:51:30 · 938 阅读 · 1 评论 -
Splay
思想Splay_tree,伸展树,顾名思义就是用伸展来进行平衡的平衡树。伸展操作是把一个节点伸展到根上的操作,当然不是简单的旋转到根,而是:(绿色节点是x,蓝色节点为p,红色节点为g) ①当p是根节点时,只需要一次正常的旋转即可。 ②当p不是根节点,x,p,g“三点共线”时,先旋转p,然后旋转x。 ③当p不是根节点,x,p,g“三点不共线”时,旋转两次x。每次插入,询问,删除原创 2017-03-04 16:43:40 · 832 阅读 · 4 评论 -
Splay区间修改
简介Splay的伸展操作使Splay在某些方面变得很方便,甚至也能够利用伸展操作来进行区间操作! ps:本人蒟蒻,写法可能很奇怪:P。 再ps:首先结构体内部的cmp要写的特殊一点(因为k表示位置):int cmp(int &k){ if (k==son[0]->si+1) return -1;if (k<son[0]->si+1) return 0; k-=son[0]->s原创 2017-03-17 21:05:49 · 876 阅读 · 1 评论 -
非旋转Treap
非旋转Treap总结。原创 2017-04-09 23:54:11 · 715 阅读 · 1 评论