IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 图的最短路径问题 -> 正文阅读

[数据结构与算法]图的最短路径问题

1、深度或广度优先搜索算法(解决单源最短路径)

该方法通过DFS或BFS暴力遍历获取一顶点到目标顶点的路径,一一比对各路径的权值和来获取最短路径

2、Dijkstra算法(解决单源最短路径)

最短路径问题—Dijkstra算法详解
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止,相对于暴力简单的Floyd算法,Dijkstra算法更为有用且时间复杂度较为合理–O(N^2)注意该算法要求图中不存在负权边!

3、Floyd算法(解决多源最短路径)

最短路径问题—Floyd算法详解
最短路径模板+解析——(FLoyd算法)
弗洛伊德算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或有向图或负权(但不可存在总权为负的回路)的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd算法的时间复杂度为O(N3),空间复杂度为O(N2)

4、Bellman-Ford算法(解决负权边,解决单源最短路径)

深入理解Bellman-Ford(SPFA)算法
Bellman-ford(解决负权边)
Bellman-Ford算法是从DJ算法引申出来的,它可以解决带有负权边的最短路径问题。值得注意的是,Bellman-Ford算法是基于邻接表,从边的角度考量的,ford算法只能用邻接表实现。此外,Bellman-Ford算法可以检测一个图是否含有负权回路。

5、SPFA算法

最短路径问题—SPFA算法详解
SPFA(Shortest Path Faster Algorithm)算法是求单源最短路径的一种算法,它是Bellman-ford的队列优化,它是一种十分高效的最短路算法。
很多时候,给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。SPFA的复杂度大约是O(kE),k是每个点的平均进队次数(一般的,k是一个常数,在稀疏图中小于2)
但是,SPFA算法稳定性较差,在稠密图中SPFA算法时间复杂度会退化。此外,SPFA算法还可以判断图中是否有负权环,即一个点入队次数超过N。

6、总结

图的最短路径:Dijkstra、Bellman-Ford、SPFA、Floyd、A*算法
适用情况
dj和ford算法用于解决单源最短路径,而floyd算法解决多源最短路径。
dj适用稠密图(邻接矩阵),因为稠密图问题与顶点关系密切;
ford算法适用稀疏图(邻接表),因为稀疏图问题与边关系密切。
floyd在稠密图(邻接矩阵)和稀疏图(邻接表)中都可以使用;
PS:dj算法虽然一般用邻接矩阵实现,但也可以用邻接表实现,只不过比较繁琐。而ford算法只能用邻接表实现。
dj算法不能解决含有负权边的图;
而Floyd算法和Ford算法可以解决含有负权边的问题,但都要求没有总和小于0的负权环路。
SPFA算法可以解决负权边的问题,而且复杂度比Ford低。形式上,它可以看做是dj算法和BFS算法的结合。
3种算法都是既能处理无向图问题,也能处理有向图问题。因为无向图只是有向图的特例,它们只是在邻接矩阵或邻接表的初始化时有所区别。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-22 12:35:49  更:2021-11-22 12:38:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:22:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码