查找不同集合中的最小生成树

时间:2016-07-26 05:34:39

标签: algorithm graph minimum-spanning-tree

这里我有两个连接的无向图  G1 = [V ; E1] and G2 =[V ; E2]在同一组顶点V上。并假设E1和E2中的边缘具有不同的颜色。

设w(e)为边e ∈ E1 ∪ E2的权重。

我想在那些在每组E1和E2中至少有一个边缘的生成树中找到最小权重生成树(MSF)。在这种情况下,如何为此找到合适的算法?我被困在这里整整一夜。

1 个答案:

答案 0 :(得分:1)

考虑两条边e1∈E1e2∈E2。它们在 V 中连接2到4个不同的顶点。如果它们连接3个或4个顶点,假设您首先收缩 e1 连接的顶点(与Kruskal's algorithm中的每个步骤相同),那么 e2 连接的顶点,然后在结果图上运行任何minimum spanning tree algorithm。然后结果是包含 e1 e2 的MST。

通过循环遍历所有e1∈E1e2∈E2(它们不能完全连接相同的两个顶点),您可以找到总MST,并找到最轻的解决方案。可以从Kruskal's algorithm

中轻松修改正确性证明

实际上,您可以提高效率,因为 E1 中最轻的边缘或 E2 中最轻的边缘必须在某些MST中使用。假设 E1 中最轻的边缘,比如 e'1 使用,并考虑与 e'1同意的剪切。 MST必须包含连接切割的一些 e≠e'1 。显然,如果e∈E1,则可以使用 e'1 代替 e 。但是,如果e∈E2,并且 e 不能使用,那么 e e'1 。但是,在这种情况下,重复 E2 的参数,会使 E2 中最轻的边缘成为MST的一部分。

因此,只有 E1 的最亮边缘以及 E2 中的任何边缘,或 E2 中最轻的边缘以及任何边缘上面提到的前两次收缩必须考虑 E1

复杂度为Θ(| E1 + E2 | f(V,E1 + E2)),其中 f 是MST算法的复杂性。