Prim 算法 "closest array"

Prim's algorithm "closest array"

我一直在尝试了解最小跨度树及其相关算法,即 Prim 算法、Kruskal 算法和 Dijkstra 算法。

我了解这些算法是如何工作的,也看到了它们的实际应用,但只有一件事我不了解 Prim 的算法,这是一个数组,我不明白它的意图是什么以及它是如何工作的有用。

情况是这样的:

我必须做一个练习,其中给定一个邻接关系 table 并且我必须 运行 Prim 的算法来创建最小跨度树。

table 看起来像这样:

   0 |1|2| 3| 4| 5|
0| 0 73 4 64 40 74 
1| 73 0 46 26 30 70 
2| 4 46 0 77 86 14 
3| 64 26 77 0 20 85 
4| 40 30 86 20 0 22 
5| 74 70 14 85 22 0 

以“|”分隔的数字是顶点, table 中的数字是边。很简单,我 运行 算法(在本网站中例如: http://www.jakebakermaths.org.uk/maths/primsalgorithmsolverv10.html )或者只是将其记在纸上并绘制最小跨度树,我得到最小成本为 86 的树,并且已使用的边为 4、26、20、22 和 14。

现在问题来了,显然仅仅解决还不够。我需要找到名为 closest[0,...,5] 的数组的值。我知道它在算法中使用,但我不知道它的用途以及我应该用它做什么或如何获得它的值。

我在互联网上搜索了一下,找到了关于 Prim 算法的link: http://lcm.csa.iisc.ernet.in/dsa/node183.html

将数组 "closest" 定义为 "For i in V - U, closest[i] gives the vertex in U that is closest to i".

我还是不明白它是什么,它的用途是什么,里面的值是什么。

我只知道我的练习答案是

closest[1] = 3
closest[2] = 0
closest[3] = 4
closest[4] = 5
closest[5] = 2

提前致谢。

在使用 Prim 算法进行 MST 时,重要的是要跟踪四件事:顶点、它是否被访问过、到顶点的最小距离以及该顶点之前的内容(这就是您要查找的内容) .

您从顶点 0 开始,您会看到离 0 最近的顶点是 2。同时,您可以访问所有其他节点,但距离更大。然而,最接近 0 的节点是 2,因此 2 被访问并且其父节点设置为顶点 0。所有其他节点尚未访问,但其父节点 as of now 是设置为 0,与其各自的距离。现在需要设置要访问的顶点的最小距离,现在把这个节点作为要考虑的节点。

Vertex | Visited | Distance | Parent
0      | T       | -        | -
1      | F       | 73       | 0
2      | T       | 4        | 0
3      | F       | 64       | 0
4      | F       | 40       | 0
5      | F       | 74       | 0

然后我们检查所有节点到 2 的距离。我们将 2 到其他节点的新距离与它以前的距离与其他节点的距离进行比较,如果需要更新,则更新.我们现在看到从 2 到 5 的距离比 0 到 5 更短,顶点 5 现在变为已访问,其父节点现在等于顶点 2。

Vertex | Visited | Distance | Parent
0      | T       | -        | -
1      | F       | 46       | 2
2      | T       | 4        | 0
3      | F       | 64       | 0
4      | F       | 40       | 0
5      | T       | 14       | 2

现在我们访问5。需要注意的是,如果访问了一个节点,我们在距离计算中不考虑它。我已经模拟了其余的,希望你能看到你是如何得到你正在寻找的答案的。

Vertex | Visited | Distance | Parent
0      | T       | -        | -
1      | F       | 46       | 2
2      | T       | 4        | 0
3      | F       | 64       | 0
4      | T       | 22       | 5
5      | T       | 14       | 2

现在访问4

Vertex | Visited | Distance | Parent
0      | T       | -        | -
1      | F       | 46       | 2
2      | T       | 4        | 0
3      | T       | 20       | 4
4      | T       | 22       | 5
5      | T       | 14       | 2

现在访问 3

Vertex | Visited | Distance | Parent
0      | T       | -        | -
1      | T       | 26       | 3
2      | T       | 4        | 0
3      | T       | 20       | 4
4      | T       | 22       | 5
5      | T       | 14       | 2