图论
文章平均质量分 86
介绍基础图论算法
Juan_2012
余尝寓居惠州嘉佑寺,纵步松风亭下。足力疲乏,思欲就亭止息。望亭宇尚在木末,意谓是如何得到?良久,忽曰:“此间有甚么歇不得处?”由是如挂钩之鱼,忽得解脱。若人悟此,虽兵阵相接,鼓声如雷霆,进则死敌,退则死法,当恁么时也不妨熟歇。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
dijikstra详解 [单源最短路]
堆优化版dijikstra事实上就是使用优先队列优化了找寻dis数组中的最小值的步骤,将O(n)的查询复杂度降为了O(nlogn),显著提升了代码的速度.这也是最常用的dijikstra版本.其中最容易错的步骤就是优先队列的创造以及入队判定.dijikstra算法,又称为单源最短路算法,是一种高效的求出一个点到其他点的最短(或最长)距离的算法. 这个算法最大的问题就是其无法处理拥有负权值的图.该算法共有两种方法,第一种为普通版(复杂度O(设该点为u,连接的点为v,连接两点的边的边权为w.原创 2025-03-15 21:06:14 · 1381 阅读 · 0 评论 -
最小生成树 Kruskal+Prim算法【图论】
本文介绍了求解最小生成树的两种经典贪心算法:Prim和Kruskal。Prim算法从任意节点开始,每次选择与当前连通块相连的最小边扩展,使用优先队列优化后时间复杂度为O(ElogV)。Kruskal算法则直接对边排序,依次选择不构成环的最小边,利用并查集维护连通性,时间复杂度为O(ElogE)。文章通过具体图例演示了两种算法的执行过程,提供了C++实现代码,并比较了二者的特点:Prim适用于稠密图但实现较复杂,Kruskal实现简单但需预先排序所有边。两种算法虽然思路不同,但都基于贪心策略正确求解最小生成树原创 2025-08-15 19:00:00 · 895 阅读 · 0 评论 -
bellman-ford详解 [单源最短路]
算法在看到负环时也是这样想的,所以会不断的更新那里, 导致算法出现错误. 我们知道, 跑n-1次循环一定可以求出最短路,所以我们可以想到这样一个思路: 我们在程序结束以后把每条边再跑一次,如果有边可以更新却没有被更新,说明绝对有负环存在,直接返回即可.应该注意的是,虽然此时最短路径已经出现, 但算法仍在继续, 这是因为这张图是极好的情况,如果边的加入顺序不一样, 那得出结果的时间也是不一样的. 这种算法最大的问题就是会便利大量无用边, SPFA正是优化了这一点, 使得复杂度大大减少(部分图不行).原创 2025-03-16 15:14:09 · 643 阅读 · 0 评论 -
SPFA 算法详解 [单源最短路]
什么是SPFA? SPFA其实就是bellman-ford算法(前面有提到过)的玄学优化. 究竟有多玄学呢? 这种算法不仅继承了原始算法可以判负环以及能跑负权图的特点, 还缩减了时间复杂度, 但如此强大的优化却并不受认可, 主要是因为有图可以克制SPFA,将其卡回原始算法的复杂度, 而负责人的出题人通常都会卡SPFA, 所以这个算法几乎已经死了, 所以它的应用范围多为随机图以及判定负环. 同时, 这种算法写起来比较轻松, 所以如果图中包含负权, 还是建议写一下. 原创 2025-03-23 15:02:28 · 1402 阅读 · 0 评论
分享