Algorithm Dijkstra将于何时';s算法与Prim';s算法产生不同的输出?
我知道Prim算法和Dijkstra算法的区别。前者产生MST,而后者给出从源到所有节点的最短路径。从数学上讲,这两种算法并不相同,因此我们并不总是期望这两种算法产生相同的结果 然而,在尝试不同的例子时,我得到了相同的结果。Prim算法和Dijkstra算法的伪代码看起来也非常相似。有人能给我举个例子吗,Prim's产生的MST在用Dijkstra's求解时无法获得,反之亦然 而且,据我所知。这两种算法都使用以下方法。如果我错了,请纠正我: 找到最短的i-j,其中i来自已包含的集合,j 从尚未包含的集合开始,然后将j添加到集合中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 从尚未包
一个简单的例子是放置在正方形角落的四个节点的集合。将cost 2的边放置在任意两个相邻的角之间,并将cost 3的边对角放置在正方形上。从任何角落运行Dijkstra算法将拾取以下边:
* -- *
| \
| \
* *
* -- *
|
|
* -- *
这些是最短路径,边的总成本为7
运行Prim算法将拾取以下边:
* -- *
| \
| \
* *
* -- *
|
|
* -- *
这是一个MST(总边缘成本为6),但这些不是最短路径(从左上角到右下角的路径成本为4,但可能有更直接的路径。)
作为一项挑战:试着在
- Dijkstra的算法找到一个最短路径树,它比实际的MST重Ω(n)倍,并且
- Prim的算法找到一个MST,其中树中的路径比相应的最短路径树中的路径长Ω(n)倍
希望这有帮助 考虑a-b有100个长度,a-c有100个长度,b-c有1个长度。根植于a的最短路径树是a-b和a-c。mst是b-c和其他边缘之一。链接:。现在我知道了区别,谢谢你的回答和编辑。