
算法
文章平均质量分 74
gronkie
一个大三咸鱼罢了,如果有什么问题,欢迎私信或者评论讨论,不过实力有限,还请多多包涵
展开
-
高度数组 详解
(可能需要一点 后缀数组的知识 后缀数组 详解)高度数组:指由后缀数组中相邻两个后缀的最长公共前缀的长度组成的数组字符串 S 为 abeacadabeasa: 11 10 7 0 3 5 8 1 4 6 9 2 ( 第 i 大的后缀子串,是从 sa [ i ] 位置开始的子串 )rk: 3 7 11 4 8 5 9 2 6 10 1 0 ( 第 rk [ i ] 大的后缀子串,是从 i 位置开始的子串 )按sa的顺序列出来:“”( 空串 )“a”“abra”“abracadabra”“a原创 2021-11-24 21:10:48 · 474 阅读 · 1 评论 -
后缀数组 详解
字符串前缀:从字符串开头到字符串某个位置字符串后缀:从字符串某个位置到字符串结尾( 原串 和 空字符串 也是 前缀(后缀))后缀数组:将所有后缀按字典序排序后,得到的数组如果我们直接将每个字符串进行比较,复杂度为 O( nlogn * n )...原创 2021-11-23 17:45:36 · 4043 阅读 · 1 评论 -
Rabin-Karp ( 字符串匹配 )详解
字符串匹配,从 字符串S 中( 长度为 n ),找到 字符串T ( 长度为 m )经典思路:遍历 字符串 S,对于每个匹配一次 O( n m )的复杂度但是这样我们就对 字符 重复判断了多次那我们应该怎么处理才能避免多次对同一个字符判断呢?我们这么考虑假如 字符串S 和 字符串T 是由数字组成例如 S 为 19735859734,T 为 973第一次比较 197 和 973第二次比较 (197 - 1 * 100)* 10 + 3 = 973 和 973第三次比较 (973 - 9 * 1原创 2021-11-22 16:53:13 · 704 阅读 · 0 评论 -
LCA详解
LCA(最近公共祖先):即在有根树中,两个节点 u 和 v 的公共祖先中距离最近的那个求解 LCA 的算法:①:预处理复杂度为 O( n ),查询复杂度为 O( n )预处理:记录各个节点的深度与父亲节点查询:如果节点 w 是 u 和 v 的共同祖先时,让 u 和 v 中较深的一方向上走,使 u 和 v 的深度相同,然后一起向上走,直到两个节点相遇时停止代码如下(有注释):vector<int> G[MAX_V]; //图的邻接表表示int root; //根节点编号int p原创 2021-11-07 13:08:55 · 1209 阅读 · 0 评论 -
强连通分量分解详解 超级详细
首先我们得了解,什么是强连通?其次我们得了解,什么是强连通分量?最后我们得了解,什么是强连通分量?#include <iostream>#include <stdio.h>#include <vector>#include <string.h>using namespace std;vector<int> data[10005];vector<int> rdata[10005];vector<int> f原创 2021-11-05 11:42:31 · 4674 阅读 · 0 评论 -
最小路径覆盖详解 超级详细(附带例题 Stock Charts(给了题目))
最小路径覆盖定义:在图G中找出一些路径,每条路径从起点走到终点,使所有点均被覆盖,且只被覆盖一次,选出的这些路径组成路径覆盖。如果找出最少的路径成为一个路径覆盖,则称为最小路径覆盖。对于不包含圈的有向图,我们可以将其转化为二分图求解转化方法:将有向图中的每个顶点都拆为 2 个顶点得到为何需要不包含圈(无向图当然也不可以):例题大概意思为有 n 支股票,有部分股票不能画在一张图中,求最少几张图能全部画下所有股票...原创 2021-11-03 14:41:13 · 2207 阅读 · 0 评论 -
树上分治详解 超级详细(附带例题 poj1741(给了题目))
#include <iostream>#include <stdio.h>#include <vector>#include <algorithm>#define INF 1000000005using namespace std;struct edge{ int to, length; edge(int t, int l) { to = t; length = l; }};vector<原创 2021-11-02 10:38:34 · 429 阅读 · 1 评论 -
平面分治详解 超级详细(附带例题 最近点对问题(给了题目))(UVA10245,P1257,P1429)
#include <iostream>#include <stdio.h>#include <algorithm>#include <math.h>#define INF (double)1e18using namespace std;pair<double, double> data[200005];bool cmp(pair<double, double> p1, pair<double, double>原创 2021-10-31 11:58:03 · 449 阅读 · 3 评论