- 博客(5)
- 资源 (2)
- 收藏
- 关注
原创 最大回文串——Manacher算法
算法背景Manacher算法是针对于字符串的一个处理算法,目的在于求解一个字符串的最大回文串。它的时间复杂度为O(n)。求解一个字符串的最大回文串最容易想到的就是从一个字符串出发将其作为中心,依次向两端扩展,直到遇到不同的字符。这种算法的最坏时间复杂度可以达到O(n^2),除此之外对于偶数长度的最大回文串需要另行讨论,因此不是最佳的解法。算法原理如上所述,Manacher算法对于偶数长的回文...
2020-04-19 15:06:27 710
原创 ST表和RMQ
什么是RMQRMQ(Range Minimum/Maximum Query),即区间最小/最大值,在这个问题上。线段树的查询时间复杂度为O(nlogn),而ST表的时间复杂度可以达到O(1)。因此处理RMQ问题我们一般使用ST表更为合适。如何实现ST表首先ST表的查询时间复杂度为O(1),但预处理时间复杂度为O(nlog(n)),因此在大量查询时会有比较好的表现。ST表是一个二维数组,两个下...
2020-01-30 23:18:41 383
原创 最小生成树(Prim和Kruskal模板)
概念连通图:在一个无向图 G 中,若从顶点i到顶点j有路径相连(当然从j到i也一定有路径),则称i和j是连通的。如果 G 是有向图,那么连接i和j的路径中所有的边都必须同向。如果图中任意两点都是连通的,那么图被称作连通图。最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。可以用Prim和Kruskal算法求出。P...
2020-01-29 14:17:12 207
原创 并查集
1、并查集是什么并查集是用来在一个集合中进行元素搜索,或者将集合合并的一种方法。主要通过数组来实现。2、并查集的实现思路我们可以将一个数组中每个单位存储的元素初始化为它的下标,代表初始时它的编号就是它自己。在之后的操作中,如果两个集合合并,那么就将其中一个集合编号所在的数组位置修改为另一个集合编号作为代表。这时,当我们搜索到这两个集合时,会发现它们的编号相同,即属于同一个集合。3、代码实现...
2020-01-22 19:20:35 192
原创 SPFA
SPFA由最短路算法2中我们可以看到Dijkstra算法并不能帮助我们判断负环(事实上如果用某些模板有负边权就会出错),这时候我们就需要用到SPFA算法了。SPFA算法的思路是队列优化,用一个dis数组计算从源点到每个点的最短路,对于这n个点,m条边,我们从源点出发,搜索从这个点出发的所有边能到达的点,看是否可以更新dis数组,若可以更新,判断该点并有没有在队列中,若不在,则将这个点添加到队列...
2019-12-23 16:17:40 172
大学生英语交流网站.zip
2020-06-26
马里奥项目Java代码实现.7z
2020-01-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人