首页 > 其他分享 >SPAFA 和Dijkstra的区别

SPAFA 和Dijkstra的区别

时间:2022-10-07 08:00:07浏览次数:51  
标签:原点 区别 队列 队首 算法 SPFA Dijkstra SPAFA

Dijkstra算法和SPFA算法都可以用于求单源最短路,前者可以用小根堆进行优化,后者用就是用队列优化过的Bell-man Ford,下面说一说这两者的区别:
Dijkstra算法是基于贪心和DP的思路,一开始先将所有点到原点的距离设置为无穷大,特别的是dis[s]=0,此处的s为原点,它是每次找到离原点最近的点,放入堆中(成为堆顶)并且标记,再以这个点为起点去更新与它相连的点,类似于bfs,而bfs具有短视的特点,它只能看到与它直接相连的点,这也就决定了Dijkstra算法不能处理负权图,假设第一次找到了离原点最近的点为X,再以X为起点去更新与X相连的点,如果存在负边的话,那我找的与X相连的点到X的距离也就不一定是最小了,这就破坏了贪心的思路,算法也就出问题了

下面这张图,看了可能会更加清晰明了一些

SPFA算法:它是要对所有的边去进行一次松弛操作,进行了n-1次更新,先初始化dis数组,起点赋值为0,其余赋值为无穷大,先起点入队列,入了队列的被标记,当队列不为空时循环,队首元素出队,松弛与队首元素相连的边,这些被更新的点如果不在队列中就加入队列, 再次队首元素出队,松弛与队首元素相连的边,它是不需要去找离原点最近的点的,所以Dijkstra算法用的是小根堆优化,SPFA直接用的队列
SPFA还有一个很大的好处是可以处理负权图,是如何处理负权图的呢
再看下面一张图

标签:原点,区别,队列,队首,算法,SPFA,Dijkstra,SPAFA
From: https://www.cnblogs.com/mrkou/p/16759038.html

相关文章

  • java类加载器 defineClass和loadClass的区别
    在阅读《自己动手写java虚拟机》时,通过观察P133~P135的代码classLoader会将加载过的class保存起来(包括defineclass的类),而只有在要加载一个类时 没有从已加载的类找到......
  • TCP与UDP的联系和区别
    TCP(传输控制协议)。是一种面向连接的、可靠的、基于字节流的传输层通信协议,使用三次握手协议建立连接、四次挥手断开连接。面向连接意味着两个使用TCP的应用(通常是一个......
  • HTTP中的重定向和请求转发的区别
    在学习JavaWeb时产生的疑问一、调用方式我们知道,在servlet中调用转发、重定向的语句如下:request.getRequestDispatcher("new.jsp").forward(request,response);//转发......
  • TCP与UDP的联系与区别
    区别TCP协议面向连接,UDP协议面向非连接;(链接)TCP协议传输速度慢,UDP协议传输速度快;(速度)TCP有丢包重传机制,UDP没有;(重传)TCP协议保证数据正确性,UDP协议可能丢包;(......
  • UDP和TCP的联系和区别
    UDP和TCP的联系和区别什么是TCP?什么是UDP?在TCP/IP中能够实现传输层功能的、具有代表性的协议是TCP和UDPTCP:TCP是面向连接的、可靠性流协议。流指的是不间断的数据结构......
  • ETL工具Datax、sqoop、kettle 的区别
    一、Sqoop主要特点:1.可以将关系型数据库中的数据导入到hdfs,hive,hbase等hadoop组件中,也可以将hadoop组件中的数据导入到关系型数据库中;2.sqoop在导入导出数据时,充分采用了......
  • 最短路径问题---Dijkstra算法详解
    0.最短路径问题介绍问题解释:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径1.Dijkstra算法介绍算法特点:迪科斯彻算法使用......
  • TCP与UDP的联系与区别?
    TCP/IP协议是一个协议簇。里面包括很多协议的,UDP只是其中的一个,之所以命名为TCP/IP协议,因为TCP、IP协议是两个很重要的协议,就用他两命名了。TCP/IP协议集包括应用层,传输......
  • PyTorch中的model.zero_grad() 与 optimizer.zero_grad()的区别
    在PyTorch中,对模型参数的梯度置0时,通常使用两种方式:model.zero_grad()optimizer.zero_grad()。二者在训练代码都很常见,那么二者的区别在哪里呢?model.zero_grad()的......
  • TCP与UDP的联系与区别
    TCP与UDP的联系:1.这两个都是运输层协议;2.都是建立在IP之上的,TCP叫做流式套接字,UDP是报文套接字。TCP与UDP的区别: ......