摘要: KMP 最近做其他题的时候用到了KMP的算法思想,所以再写下KMP算法的笔记增加印象。 KMP算法用于匹配字符串,比起暴力优化了时间复杂度。 思路 KMP的精髓是next数组。 模式串(短的那个)与主串(长的那个)匹配时,若失配(p[j] != s[i])时,在主串指针不动的情况(在主串指针遍历完主 阅读全文
posted @ 2021-10-08 19:56 Salty_Fish 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 整数二分 重新开始写一遍二分吧。其实看起来很简单,但是写的时候细节确实很多,不小心就会写错。 功利一点,先从板子开始吧。 bool check(int x) { /* ... */ } // 检查x是否满足某种性质 // 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用: i 阅读全文
posted @ 2021-09-28 19:34 Salty_Fish 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 前缀和与差分 先记一下前缀和,比较简单。 前缀和 一维前缀和 一维前缀和:能以$O(1)$的时间完成求一段区间上的和。 定义:s[i] = a[1] + a[2] + ... + a[i] 求解$l-r$上的和就是s[r]-s[l-1] 二维前缀和 就是把一维的拓展了一下,相对应的求解s[i]的方式 阅读全文
posted @ 2020-08-18 21:26 Salty_Fish 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 快速选择算法 快速选择算法基于快速排序算法,时间复杂度由$O(nlogn)$降到$O(n)$ 思想是这样的,快速选择不需要所有的数据,只需要知道这个数排在第几位 而快速排序算法刚好可以满足这个要求,因为快速选择算法每次都将整个区间一分为二,每次对比可以知道要求的数在哪个区间,然后选择对应的区间进行递 阅读全文
posted @ 2020-08-17 11:28 Salty_Fish 阅读(571) 评论(0) 推荐(0) 编辑
摘要: 归并排序求逆序对 逆序对:对于数列的第 \(i\) 个和第 \(j\) 个元素,如果满足 \(i < j\) 且 \(a[i] > a[j]\),则其为一个逆序对。 暴力求法就是两遍for循环,$O(n^2)$超时 用归并可以顺便求出来,\(O(nlogn)\) 在一次归并排序中,因为归并要求将一个 阅读全文
posted @ 2020-08-16 18:50 Salty_Fish 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 学习记录:Dijstra最短路 其实Dijstra早学过,这次主要写点用邻接表和堆优化的东西 想法 Dijstra的想法其实很简单,维护一个已经达到最短路线的点的集合即可。 从出发点开始,找到距离出发点最近的那个点加入集合,重复此步骤直至所有点都加入集合即可。 原因很简单,设出发点为$s$,距离$s 阅读全文
posted @ 2020-08-05 12:42 Salty_Fish 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 学习记录:拓扑排序 概念: 拓扑排序是对有向无环图的顶点的一种排序。 有向无环图(Directed Acyclic Graph)(DAG): 从任意顶点出发无法返回到出发点,即为有向无环图 它使得如果存在一条从$v_i$到$v_j$的路径,那么在排序中$v_j$出现在$v_i$的后面。 可以这样想, 阅读全文
posted @ 2020-08-01 23:51 Salty_Fish 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 最小生成树 最小生成树是无向图中额一个典型问题。问题模型可以用以下的方式描述: 给定无向图,要求连接所有的点,并求出此时最小的边长度总和。 模板题:P3366 【模板】最小生成树 前置知识:并查集,贪心,存图方法 prim算法 简介: 是对点的贪心算法。从任意一点开始,选取距离该点最近的一点加入集合 阅读全文
posted @ 2020-07-27 16:54 Salty_Fish 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 线段树 V1.0 之所以叫v1.0呢,是因为这是我第一次学这个数据结构。 考虑到重要性,以后在做题的过程中会对这篇博客做更新的。 概念 线段树是一种二叉搜索树,用于处理区间问题的数据结构。 与ST表不同的是,线段树支持点,区间修改。相应的,虽然预处理速度与ST表相同,都是$O(logn)$,但查询速 阅读全文
posted @ 2020-07-07 16:21 Salty_Fish 阅读(115) 评论(0) 推荐(0) 编辑
摘要: STL unique 简介 用于元素去重,但不会真的删除,可以看作是将相邻的重复元素去除,用后面的不相同的元素补上来。 因为unique函数是针对相邻重复元素的,所以一般会先进行排序再unique 函数原型 iterator unique(iterator it_1,iterator it_2);/ 阅读全文
posted @ 2020-07-01 10:31 Salty_Fish 阅读(254) 评论(0) 推荐(0) 编辑