在图论中,Prim算法是计算最小生成树的算法,而Dijkstra算法是计算最短路径的算法。二者看起来比较类似,因为假设全部顶点的集合是V,已经被挑选出来的点的集合是U,那么二者都是从集合V-U中不断的挑选权值最低的点加入U,那么二者是否等价呢?也就是说是否Dijkstra也可以计算出最小生成树而Prim也可以计算出从第一个顶点v0到其他点的最短路径呢?答案是否定的,否则就不必有两个算法了。

二者的不同之处在于“权值最低”的定义不同,Prim的“权值最低”是相对于U中的任意一点而言的,也就是把U中的点看成一个整体,每次寻找V-U中跟U的距离最小(也就是跟U中任意一点的距离最小)的一点加入U;而Dijkstra的“权值最低”是相对于v0而言的,也就是每次寻找V-U中跟v0的距离最小的一点加入U。

一个可以说明二者不等价的例子是有四个顶点(v0, v1, v2, v3)和四条边且边值定义为(v0, v1)=20, (v0, v2)=10, (v1, v3)=2, (v3, v2)=15的图,用Prim算法得到的最小生成树中v0跟v1是不直接相连的,也就是在最小生成树中v0v1的距离是v0->v2->v3->v1的距离是27,而用Dijkstra算法得到的v0v1的距离是20,也就是二者直接连线的长度。

转载于:https://www.cnblogs.com/huiliu/archive/2011/04/15/2017228.html

Prim和Dijkstra算法的区别相关推荐

  1. 【图解】Prim和Kruskal算法的区别

    [贪心]Prim和Kruskal算法的区别 Kruskal算法和Prim算法的优劣 Kruskal算法,相较于Prim算法是基于点的操作,Kruskal算法是基于边的操作,思想也比Prim简单,更容易 ...

  2. Floyd算法与Dijkstra算法的区别

    Floyd算法与Dijkstra算法的区别? 1.如果依次对某个顶点运用Dijkstra算法,则与Floyd算法相2113比,很多路径和结果计算是重复的,虽然复杂5261度相同,但4102是运算量差了 ...

  3. 经典算法研究系列:二、Dijkstra 算法初探

    经典算法研究系列:二.Dijkstra 算法初探  July   二零一一年一月 ====================== 本文主要参考:算法导论 第二版.维基百科. 写的不好之处,还望见谅. 本 ...

  4. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  5. Prim算法和Dijkstra算法的异同

    今天看了下,主要有以下几点: 1: Prim是计算最小生成树的算法,比如为N个村庄修路,怎么修花销最少. Dijkstra是计算最短路径的算法,比如从a村庄走到其他任意村庄的距离. 2: Prim算法 ...

  6. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)

    最小生成树: 生成树的定义:给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树.(Spanning Tree) 最小生成树的定义:在生成树的基础上,如果边上有 ...

  7. dijkstra算法_Python实现图的经典DFS、BFS、Dijkstra、Floyd、Prim、Kruskal算法

    讲在前面的话,图的算法太多,理论知识肯定一篇文章讲不完,关于理论知识大家可以参考教材Sedgewick的<算法>或reference的链接,本文主要还是想在一篇文章中记录六种算法的Pyth ...

  8. dfs时间复杂度_Python实现图的经典DFS、BFS、Dijkstra、Floyd、Prim、Kruskal算法

    讲在前面的话,图的算法太多,理论知识肯定一篇文章讲不完,关于理论知识大家可以参考教材Sedgewick的<算法>或reference的链接,本文主要还是想在一篇文章中记录六种算法的Pyth ...

  9. 学习进度2012-6-26(动态规划算法、Prim算法、Dijkstra算法)

    今天学习下三个算法:动态规划算法.Prim算法.Dijkstra算法,将自己理解的逻辑略作总结. 1.动态规划算法是选取两个字符串的最长子序列的解法作为切入点学习,在公司午休时间将代码写了下,初步测试 ...

最新文章

  1. app.vue只执行一次吗_面包可以只发酵一次吗?
  2. OpenGL创建一个GLFW窗口的实例
  3. MySQL查询,按拼音首字母排序
  4. c 取数组 最大值 算法_拜托,面试别再问我最大值最小值了!!!
  5. 起动缓慢_世界最大柴油机为何是压缩空气起动?那么它到底是如何起动的呢?...
  6. linux驱动之poll/select轮询机制实例分析(结合驱动中断使用)
  7. grub 与grub2
  8. (1)信息熵,条件熵,信息增益,信息增益率
  9. 换服务器原网站数据会丢失吗,ecs服务器更换操作系统后原服务器数据还在吗?...
  10. vue-cropper 自定义旋转任意角度
  11. TI/德州仪器 SN74AHC1G04DBVR 单路反向器闸
  12. zc706开发板的linux开发,第一篇:zc706 开箱及开发环境搭建
  13. java isreachable_Java网络编程从入门到精通(12):使用isReachable方法探测主机是否可以连通...
  14. (一) 一元线性回归方程 梯度下降
  15. 云函数调用失败的原因
  16. Discuz!uc.key泄露导致代码注入漏洞uc.php的解决方法
  17. oracle mysql查询速度慢_oracle 根据时间范围查询缓慢问题排查解决
  18. 美食推荐网站系统springboot+jsp
  19. 塞班S60V3通用UCWEB7.0正式版SISX安装包下载
  20. 大数据对我国商业模式创新的“三维”驱动研究

热门文章

  1. OpenCV差分二值化的实时场景文本检测的实例(附完整代码)
  2. OpenCV油画效果
  3. 使用Qt Assistant
  4. QT的QLocale类的使用
  5. C++对C的加强之struct类型加强
  6. pycharm下配置jupyter_在 Pycharm 中安装及使用 Jupyter (图文详解)
  7. 「Python」ubuntu使用make命令安装python(带详细解释和防坑指南)
  8. Apache Tez介绍,术语,安装,监控等
  9. 安装单机版RabitMQ,java操作rabitmq案例(来自同学给的资料,并做升级到最新版本修改,补充问题修改)
  10. Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能,什么是distributed document store(来自网络+学习资料)