请帮助理解 prims 算法伪代码(在 coreman 和 wiki 中) Prim's algorithm。
MST-PRIM (G, w, r) {
for each u ∈ G.V
u.key = ∞
u.parent = NIL
r.key = 0
Q = G.V
while (Q ≠ ø)
//1
u = Extract-Min(Q)
for each v ∈ G.Adj[u]
if (v ∈ Q) and w(u,v) < v.key
v.parent = u
v.key = w(u,v)}
我能够理解直到 1 或 while 循环 r.key=0 确保首先扫描根的邻居或相邻节点,但由于 u 已经属于 Q(节点队列直到现在不包括在 prims 最小生成树中)和 v同样在 Q 中,将无助于生成 prims MST。
也是 coreman 和维基状态
1. A = { (v, v.parent) : v ∈ V - {r} - Q }.
2. The vertices already placed into the minimum spanning tree are those in V−Q.
3. For all vertices v ∈ Q, if v.parent ≠ NIL, then v.key < ∞ and v.key is the weight of a light edge
在第 6-11 行的 while 循环的每次迭代之前,(v, v.parent) 将 v :: 连接到已经放置在最小生成树中的某个顶点。
因为 A 是我们的 MST,那么 1. 将如何提供帮助,因为 v 已经包含在我们的 MST 中(如 v ∈ V - {r} - Q 所示)为什么应该包含它。