2025年暑假信友队夏令营结营总结
知识点梳理
在长达28天的夏令营中,我学习到了很多知识,收获颇
评价标准
1(难度)超级简单
2 不太复杂
3 一般般
4 很难
5 太难了!
学习内容
单调栈、单调队列
单调栈与单调队列,顾名思义,他们都是复合单调性的(如单调递增、单调不递减),单调栈是用来求下一个第一个更大/更小值的,单调队列是用来做滑动窗口的(如一个序列中一个字串的最大值最小值平均值),这部分知识我认为挺简单的,难度2
倍增、ST表
倍增是类似于二进制优化的优化方法,可以利用二进制的性质来解决一些数学问题,ST表经常用于解决RMQ(静态区间最值查询问题),思想是利用倍增的方法,把本来存储空间需求很大的容器压缩(也可以说是二进制哈希,只不过是下标的),我这部分知识不太明白,难度4
离散化、二分
离散化是一种离散思想,把较大的数据按一定规律转化成小很多的数,使它们的关系(看题目要求)不变,二分则是非常基础的算法,在拥有单调性(即某个值越大,答案越大或越小)的题目中,实用O(log N)的时间复杂度枚举,通过每次函数的是非收缩左右端点,大大降低时间复杂度,这部分知识,离散化我觉得太难了,难度5,二分呢太简单,难度1
归并、前缀和差分
归并排序利用分治的思想,对于需要排序的数组,不停地拆分,直到拆分到一定程度,把两个长度相同的子序列合并起来(按照排序规则,例如升序),最后得到有序序列的一种排序方式,当然它也可以做关于逆序对的一些问题。而前缀和和差分就很简单了,前缀和的目的是快速求出区间内元素的总值,差分则是快速改变一个序列一段元素的方式,这两个难度我都认为是难度1,很简单
折半搜索
想一些选或不选的题目,在想不出状态转移方程的时候一般都会用搜索来做,但是搜索的时间复杂度极高,比如2^{30},就是1073741824,会超时,但是我们折半搜索,把所有元素分成两段分别搜索,最后合并一下,那么时间复杂度是指数就瞬间\div 2,就成为了2^{15} \times 2,直接变成65536,嗖的一下降了下来,就不会超时了,由于我是搜索小能手,搜索的题目我都觉得简单!难度1
并查集、拓扑排序
并查集就是一种树形结构,可以实现快速合并树、删除、改变元素,非常方便简单,拓扑排序是处理树和图的方法,用广度优先搜索的思路,建造一个队列,每次把叶子结点入队,处理问题的方式,相比暴力好多了,这两个我还是认为难度1
最小生成树
在一个图中,我们需要生成一颗树,使得其包含所有节点且边权之和最小,我们就要生成最小生成树,有两种方法,一种是prim,一种是kruskal,前者的思想是从某一个点出发,枚举每一个连边,找最短(前提是其连接的节点不在等钱最小生成树内)连接,直到最所节点被选中,后者则是把边按照边权升序排序,从小到大选,如果这条边连接的节点在最小生成树内,那么就没有意义了,那就不要选,否则选,直到所有节点都在最小生成树内,这个算法我认为太简单了!难度1
最短路
当我们遇到一个图,要求求出任意两点的最短路径,我们就要用到最短路算法了。Floyd算法,常用于数据范围不是很大,求多源最短路的题目,思想是每次枚举一个点,把这个点设为所有点的转折连边,把所有其他两点的距离用这个点来转折取min,记录在二维数组中的方法。Bellman-Ford算法,用于求单元最短路,速度较快,不可处理负环,思想是,既然没有负环,那么最短路肯定不会有环存在,因此进行n-1次松弛,每次枚举一个点,用这个点去更新单元最短路。SPFA算法,用于求单元最短路,是Bellman-Ford算法的优化,可以处理负环(如果一个节点的松弛超过V次,则存在负环)。Dijkstra算法是一个较为复杂,但是速度更快的单元最短路算法,用优先队列优化,维护所有的对,每次取出一个最小值的一个加入S,更新优先队列,这部分的算法有点超标,难度4
背包DP
非常简单的普及组知识,01、完全、多重、分组、混合、二进制优化,都非常简单,难度1!
树形DP
树形DP,顾名思义就是在树中动归DP,我们用到DFS枚举每一个节点作为一颗子树根节点,慢慢往上层DP,我传两个参数,分别是这个子节点和其父节点,然后枚举其子节点搜索,(如果有父子相同则跳过),我觉得写个模板出来太简单了,但是状态转移方程有点难以推理,难度4
图论
这里不做详细讲解,就是关于图的问题,一般设计最小生成树、最短路、图上搜索,难度3吧
总结
这个夏令营我觉得自己没有完全学会的算法有倍增、ST表、离散化三个

浙公网安备 33010602011771号