如何找到包含给定边的最小生成树?

How can I find a Minimum spanning tree containing a given edge?

在加权无向图中,如果可能的话,我需要找到包含给定边 'e' 的最小生成树。我该怎么做? Kruskal 从 'e' 开始 ?

我会使用Kruskal算法因为如果边e是循环的一部分并且e具有最大权重在那个循环中,那么算法将不包括'e'。我相信通过修改它可以工作。但是使用 Prim 的算法所需的修改是最小的。

Prim 的算法最适合这个问题,如果我们回忆一下 Prim 算法是这样的:

第 1 步:从包含随机选取的顶点的集合 S 开始。

STEP 2:从集合S中的一个顶点和集合V[中的其他顶点的所有边=56=] - S,挑一个权重最小的那个。设(x,y)x属于Sy 属于 V - S.

步骤 3:添加 y 以设置 S.

STEP 4:重复步骤2和3直到S包含所有顶点。

需要修改:

对于您的问题,只需将步骤 1 更改为:

STEP 1:从集合 S 开始,包含一个顶点 uv 其中边 'e' = (u,v ).

对于懒惰的解决方案,使该边缘的成本为零,并运行任何 MST 算法。

这是一个不需要修改 MST 算法的可能的“惰性解决方案”

  1. 运行 任何 MST算法。
  • MST算法会输出一个MSTT = (V,E,w)
  1. 如果边 e 已经在 T 中那么你就完成了

  2. 如果边e不在T中,那么加上边e,你会得到一个循环σ

  3. 遍历循环 σ,如果有一条边的权重与 e 相同,则删除该边并完成

  4. 如果 none 条边的权重与 e 相同,则不可能有 e 的 MST

这种方法的优点在于它很容易形式化证明,因此您有 MST 算法的证明,其他步骤基于已知定理。