![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
星垂月朦胧
这个作者很懒,什么都没留下…
展开
-
区间最值问题 静态ST表 算法模板
视频配套代码 详细的视频讲解戳我ST表用来处理一类静态区间问题,只要该区间符合性质: f(L,R)=f(f(L,a),f(b,R)) (a>=b)f(L,R)=f(f(L,a),f(b,R))\;\;(a>=b)f(L,R)=f(f(L,a),f(b,R))(a>=b)可知此处ab部分区间是可以有重叠的函数max,min,gcd,lcm等这些均符合该性质 即f(a,a)=af(a,a)=af(a,a)=a只能解决静态的问题利用了区间dp的思想RMQ区间最值问题O(原创 2020-08-29 13:14:06 · 104 阅读 · 0 评论 -
AC自动机 算法模板
这是网课的配套代码哦~ 戳我多模式匹配通过公共后缀来进行匹配失败时候的跳转 因为模式串在字符串中可重叠出现利用了trie树和类KMP的思想 可以近似看作在trie树上的kmp匹配复杂度O(n)O(n)O(n)构建fail指针fail本质是当前pattern的最长后缀第一层的全部指向root通过BFS遍历后面的节点 因为跳转是从长到短的如果当前节点x的父节点f的fail指针拥有和当前节点一样字符的节点y 那么x的fail指向y匹配从根节点出发正常的tr原创 2020-07-14 15:44:03 · 85 阅读 · 0 评论 -
二叉堆 与 堆排序 算法模板
以下是视频讲解的配套代码: 戳我看超详细解析~有画图有手撕代码文章目录二叉堆概念堆的储存插入删除查询STL的优先队列堆排序STL建立堆二叉堆概念堆是一棵完全二叉树 (完全二叉树省略介绍)堆顶是最大/最小 (此处的最大最小是广义的)堆顶的左右儿子也是堆堆的储存由于是完全二叉树 所以直接就能用数组来进行储存private: vector<T> v; int size; //堆的大小 总比v大小小1 (v0是垃圾值)并且使用#define parent (root>原创 2020-06-05 19:52:22 · 138 阅读 · 0 评论 -
最短路 dijkstra(迪杰斯特拉) 算法模板 原理 正确性和非负证明 代码实现 获取最短路径 堆优化
超详细小白也能看懂的dijkstra教学视频以下内容均为视频的配套文章目录理论介绍步骤证明已选取节点不改性正确性负权失效代码朴素实现与路径堆优化原理代码理论介绍dijkstra是求单源最短路的一个算法 一般来说只用来处理非负权图步骤具体的数学步骤不是我的风格个人总结出来的dijkstra就只有两个步骤:选取一个节点 该节点满足:距离最短没有被选取过对于选取的节点 对它所有的邻接节点进行松弛操作松弛操作大概就是能够选到一个节点C作为中间点 使得原路径AB变为ACB后总距离更原创 2020-05-22 02:40:17 · 429 阅读 · 0 评论 -
图的储存 邻接表 算法模板
小白也能看懂的视频讲解邻接表对重复边会重复加入head其实会不断指向新加进来的边 而Next则是把更换的head边给保存下来 所谓链表的头插法const int n,m; //n个节点 m条边vector<int> edge(m+5,0); //存编号为i的边的终点节点 a-->b 存的是b的值vector<int> Next(m+5,0); //存编号为i的边的下一个兄弟节点编号 a-->b a-->c 存的是下一条边的编号vector<原创 2020-05-15 21:51:14 · 164 阅读 · 0 评论 -
最短路 floyd 算法模板
小白也能看懂的视频讲解Floyd利用动态规划思想 求任意两点之间的最短距离和最短路径不能处理负环 时间复杂度为O(n3)O(n^3)O(n3)证明dp正确性设i,j最短路两端点之间最大编号节点为k,设i,k之间最大编号节点为k1,设k,j之间最大节点为k2那么显然有k>k1且k>k2 而k1和k2在k之前肯定被dp过了根据数学归纳 初始边界为当i,j之间是原子距离 无中间点时候视频中有举例证明int n; //节点数vector<vector<int&原创 2020-05-10 00:37:59 · 147 阅读 · 0 评论 -
字符串哈希(hash) 算法模板
小白也能看懂的视频讲解BKDR hash将字符串看成是P进制数字,P的选取是131 或13331冲突率较低用unsigned long long 来进行隐式用264−12^{64}-1264−1来取模const int n,P=13331;vector<unsigned long long> h(n,0); //储存前i个字符串的哈希值vector<unsigne...原创 2020-04-30 20:18:32 · 277 阅读 · 0 评论 -
字典树Trie 算法模板
小白也能看懂的视频讲解单词查找树,利用字符串的公共前缀来减少查询时间复杂度为O(n)利用数组来建树const int N; //树的最大节点数const int M=26; //数的子节点的数目 举例26为小写字母作为可能的子节点vector<vector<int>> trie(N,vecotr<int>(M,0)); //trie树数组 存...原创 2020-04-28 19:17:55 · 146 阅读 · 0 评论 -
KMP匹配 算法模板
小白也能看懂的视频讲解O(m+n) 的字符匹配,其中m是字符串的长度,n是匹配串的长度Next数组预处理性质: (i+1)-Next[i] 即前缀的长度减去对应的Next为前缀循环节的大小string pattern; //模式子串vector<int> Next(pattern.length(),0); //Next数组void Next_pre(string p...原创 2020-04-28 19:15:00 · 172 阅读 · 0 评论