博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Prim和Dijkstra算法的区别
阅读量:6990 次
发布时间:2019-06-27

本文共 623 字,大约阅读时间需要 2 分钟。

在图论中,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算法得到的最小生成树中v0v1是不直接相连的,也就是在最小生成树中v0v1的距离是v0->v2->v3->v1的距离是27,而用Dijkstra算法得到的v0v1的距离是20,也就是二者直接连线的长度。

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

你可能感兴趣的文章
企业微信自建应用开发初探
查看>>
麦当劳数字化转型中获得的6个数据科学经验
查看>>
国内移动测试服务盘点
查看>>
又拍云推三款场景化CDN应用 目标行业第二
查看>>
JDK 11版本时间表
查看>>
Angular 4.x template syntax & common directives
查看>>
为什么Oracle公开嫌弃自家产品MySQL?
查看>>
分布式系统的开发经验与心得
查看>>
企业金融云存储建设之路
查看>>
在Kotlin中使用Gradle构建缓存
查看>>
强化学习遭遇瓶颈!分层RL将成为突破的希望
查看>>
深度学习CTR预估模型凭什么成为互联网增长的关键?
查看>>
如何使用CloudFormation构建 VPC?
查看>>
同事反馈环:为什么度量和会议还不够充分
查看>>
React从入门到精通系列之(4)组件化和Props传递
查看>>
2016年末总结,我的前端之路
查看>>
译文-垃圾回收器是什么
查看>>
了解这12个概念,让你的JavaScript水平更上一层楼
查看>>
区块链安全:2019年我们走了多远?
查看>>
我们用5分钟写了一个跨多端项目
查看>>