Prim和Dijkstra算法的区别
2011-04-15 15:26
1091 查看
在图论中,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,也就是二者直接连线的长度。
二者的不同之处在于“权值最低”的定义不同,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,也就是二者直接连线的长度。
相关文章推荐
- Prim和Dijkstra算法的区别
- HDU1301 最小生成树 + Prim +(Prim求最小生成树与Dijkstra求最短路的区别) (如此题不要误解题意为用Dijkstra!)
- Dijkstra算法、Floyd算法的区别与联系,并由此谈到greedy和DP
- Prim算法与Dijkstra算法的区别
- Prim Dijkstra 区别
- poj 1258 Agri-Net prim模板 prim与dijkstra的区别
- poj 3026 BFS + prim(最短路最小生成树的区别)
- 比较Dijkstra算法和最小生成树prim算法之间的区别
- 一个带有Kruskal、Prim、Dijkstra算法的图类型 - C++ for C Programmers
- 浅析最小生成树和单源最短路径的区别(含Prim、Kruskal、Dijkstra、Bellman-Ford)
- 优先队列:二叉堆优化的Prim与Dijkstra算法
- 我眼中 迪杰斯特拉(Dijkstra)与 普雷姆 (prim)的 区别
- 图的邻接矩阵实现(包括PRIM和DIJKSTRA算法)
- Prim算法与Dijkstra算法的区别
- dijkstra算法与prim算法的区别
- dijkstra算法与prim算法的区别
- Prim算法与Dijkstra算法的联系与区别
- dijkstra算法与prim算法的区别
- 图的邻接矩阵表示形式,DFS和BFS,最小生成树Prim和Kruscal,单源最短路径Dijkstra算法
- Prim算法与Dijkstra算法的区别