3.28

今日
一、最短路径算法 详解

  1. Dijkstra 算法
    核心定位
    单源最短路径(一个起点到所有点),无负权边
    适用图
    稠密图 → 朴素版(邻接矩阵)
    稀疏图 → 堆优化版(邻接表)
    时间复杂度
    朴素版:
    O( n^2 )
    堆优化版:
    O(Elogn)
    朴素:用数组存距离,每次选最小距离的点,更新相邻点
    堆优化:用优先队列(小根堆) 优化选点过程
    核心特点
    效率极高 正权图首选 绝对不能处理负权边 / 负环
    贪心选小点,无负才能用

  2. Bellman-Ford 算法
    核心定位
    单源最短路径,支持负权边,能判断负环
    适用图
    所有图(稀疏 / 稠密都能用,但效率极低)
    时间复杂度
    O(n×E)
    实现方式
    遍历所有边,重复松弛n−1次;第n次还能松弛 = 有负环
    核心特点
    支持负权边 能检测负环 速度最慢,几乎不用
    遍历所有边,负环我能判
    SPFA 算法(Bellman 队列优化)
    适用图
    稀疏图首选
    时间复杂度
    平均
    O(E)
    ,最坏
    O(nE)
    实现方式
    用队列存待更新的点,避免重复遍历无用边
    核心特点
    比 Bellman 快很多支持负权边 负环会死循环(可加计数判负环) 正权图不如 Dijkstra

  3. Kruskal 算法(边贪心)
    核心定位
    最小生成树(连通所有点,总边权最小)
    适用图
    稀疏图 首选!
    时间复杂度
    O(ElogE)
    (排序边的时间)
    实现方式
    把所有边按权值从小到大排序
    用并查集选边:不形成环就加入
    选够n−1条边结束
    核心特点
    代码最简单(10 行搞定) 稀疏图效率无敌 稠密图 / 完全图 绝对不用(边太多,排序爆炸)
    排序加并查,稀疏图称王

  4. Prim 算法(点贪心)
    核心定位
    最小生成树
    适用图
    稠密图 / 完全图
    时间复杂度
    朴素版:
    O(n^2)
    堆优化版:
    O(Elogn)
    实现方式
    用数组存点到生成树的最小距离
    每次选距离最小的点加入生成树
    更新其他点的距离,累加 n−1条边
    核心特点
    稠密图 / 完全图 效率碾压 Kruskal 不用存边,直接计算边权(完全图神器)
    点选最小边,稠密图无敌

posted @ 2026-03-28 15:36  douzishuo  阅读(24)  评论(0)    收藏  举报