在Prim的算法中卡住和耗尽节点?

时间:2015-07-08 20:42:40

标签: algorithm graph graph-theory minimum-spanning-tree prims-algorithm

所以我有这张图

enter image description here

我正在尝试构建其最小生成树。从顶点A开始,我去了A-B-F-E-D,之后没有地方可去,考虑到D的所有相邻顶点已经是树的一部分,我该如何继续前进?

另外,如何计算新边缘的值范围,使其成为最小生成树的一部分?

先谢谢你们。

1 个答案:

答案 0 :(得分:3)

我认为你对Prim算法的工作方式有一点误解。根据您在上面给出的描述,看起来您认为Prim的算法是这样的:

  • 从任何节点开始。
  • 查看连接到当前节点但尚未访问过的所有节点。
  • 转到最便宜的这些节点。
  • 重复直到覆盖所有节点。

这是关闭到Prim的算法如何工作,但它并不完全正确。在Prim的算法中,没有“当前”节点的概念。相反,您有两组节点:您添加的节点和未添加的节点。 Prim的算法然后就像这样:

  • 从任何节点开始。将其添加到“in”集。
  • 查看连接到“in”集的所有节点,这些节点尚未添加到“in”集中。
  • 将最便宜的这些节点添加到“in”集中。
  • 重复,直到所有节点都在“in”集中。

在上面给出的图表中,您从节点A开始。遵循算法,我们查看连接到A的所有节点并获取最便宜的(B)并将其添加到“in”集合中。 “in”集现在包含A和B.

现在,我们查看“in”集中连接到任何的所有节点。那些是节点D,F,E和H.其中,最便宜的是H,所以我们将H加到我们的“in”集合中,现在是A,B和H.

我们再次查看“in”集中连接到任何的所有节点。那些是节点D,F,E,I和G.其中最便宜的是F,所以我们将其添加到。

如果重复此过程直到添加所有节点,并且在执行此操作的过程中跟踪您添加的边缘,则最终会得到整个图形的最小生成树。

希望这有帮助!