
算法学习
!!黑桃K!!
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
最大回文串——Manacher算法
算法背景 Manacher算法是针对于字符串的一个处理算法,目的在于求解一个字符串的最大回文串。它的时间复杂度为O(n)。求解一个字符串的最大回文串最容易想到的就是从一个字符串出发将其作为中心,依次向两端扩展,直到遇到不同的字符。这种算法的最坏时间复杂度可以达到O(n^2),除此之外对于偶数长度的最大回文串需要另行讨论,因此不是最佳的解法。 算法原理 如上所述,Manacher算法对于偶数长的回文...原创 2020-04-19 15:06:27 · 769 阅读 · 0 评论 -
最小生成树(Prim和Kruskal模板)
概念 连通图:在一个无向图 G 中,若从顶点i到顶点j有路径相连(当然从j到i也一定有路径),则称i和j是连通的。如果 G 是有向图,那么连接i和j的路径中所有的边都必须同向。如果图中任意两点都是连通的,那么图被称作连通图。 最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 可以用Prim和Kruskal算法求出。 P...原创 2020-01-29 14:17:12 · 244 阅读 · 0 评论 -
并查集
1、并查集是什么 并查集是用来在一个集合中进行元素搜索,或者将集合合并的一种方法。主要通过数组来实现。 2、并查集的实现思路 我们可以将一个数组中每个单位存储的元素初始化为它的下标,代表初始时它的编号就是它自己。在之后的操作中,如果两个集合合并,那么就将其中一个集合编号所在的数组位置修改为另一个集合编号作为代表。这时,当我们搜索到这两个集合时,会发现它们的编号相同,即属于同一个集合。 3、代码实现...原创 2020-01-22 19:20:35 · 236 阅读 · 0 评论 -
SPFA
SPFA 由最短路算法2中我们可以看到Dijkstra算法并不能帮助我们判断负环(事实上如果用某些模板有负边权就会出错),这时候我们就需要用到SPFA算法了。 SPFA算法的思路是队列优化,用一个dis数组计算从源点到每个点的最短路,对于这n个点,m条边,我们从源点出发,搜索从这个点出发的所有边能到达的点,看是否可以更新dis数组,若可以更新,判断该点并有没有在队列中,若不在,则将这个点添加到队列...原创 2019-12-23 16:17:40 · 207 阅读 · 0 评论