Algorithm Dijkstra将于何时';s算法与Prim';s算法产生不同的输出?

Algorithm Dijkstra将于何时';s算法与Prim';s算法产生不同的输出?,algorithm,graph,graph-algorithm,dijkstra,prims-algorithm,Algorithm,Graph,Graph Algorithm,Dijkstra,Prims Algorithm,我知道Prim算法和Dijkstra算法的区别。前者产生MST,而后者给出从源到所有节点的最短路径。从数学上讲,这两种算法并不相同,因此我们并不总是期望这两种算法产生相同的结果 然而,在尝试不同的例子时,我得到了相同的结果。Prim算法和Dijkstra算法的伪代码看起来也非常相似。有人能给我举个例子吗,Prim's产生的MST在用Dijkstra's求解时无法获得,反之亦然 而且,据我所知。这两种算法都使用以下方法。如果我错了,请纠正我: 找到最短的i-j,其中i来自已包含的集合,j 从尚未包

我知道Prim算法和Dijkstra算法的区别。前者产生MST,而后者给出从源到所有节点的最短路径。从数学上讲,这两种算法并不相同,因此我们并不总是期望这两种算法产生相同的结果

然而,在尝试不同的例子时,我得到了相同的结果。Prim算法和Dijkstra算法的伪代码看起来也非常相似。有人能给我举个例子吗,Prim's产生的MST在用Dijkstra's求解时无法获得,反之亦然

而且,据我所知。这两种算法都使用以下方法。如果我错了,请纠正我:

找到最短的i-j,其中i来自已包含的集合,j 从尚未包含的集合开始,然后将j添加到集合中


一个简单的例子是放置在正方形角落的四个节点的集合。将cost 2的边放置在任意两个相邻的角之间,并将cost 3的边对角放置在正方形上。从任何角落运行Dijkstra算法将拾取以下边:

* -- *
| \
|  \
*    *
* -- *
| 
|
* -- *
这些是最短路径,边的总成本为7

运行Prim算法将拾取以下边:

* -- *
| \
|  \
*    *
* -- *
| 
|
* -- *
这是一个MST(总边缘成本为6),但这些不是最短路径(从左上角到右下角的路径成本为4,但可能有更直接的路径。)

作为一项挑战:试着在

  • Dijkstra的算法找到一个最短路径树,它比实际的MST重Ω(n)倍,并且
  • Prim的算法找到一个MST,其中树中的路径比相应的最短路径树中的路径长Ω(n)倍
Prim和Dijkstra都是通过查找不在集合中的某个节点并将其放入集合来选择节点的,但它们在调整距离的方式上有所不同。在Prim算法中,使用的距离始终是从集合外的任何节点到集合内的任何节点的最小距离。在Dijkstra算法中,距离是以下值的最小值:

距离(起始节点,u)+l(u,v)

换句话说,Dijkstra的算法考虑了从起始节点到集合外节点的距离,而Prim的算法则没有


希望这有帮助

考虑a-b有100个长度,a-c有100个长度,b-c有1个长度。根植于a的最短路径树是a-b和a-c。mst是b-c和其他边缘之一。链接:。

现在我知道了区别,谢谢你的回答和编辑。