图有两个/三个不同的最小生成树?

时间:2013-05-15 18:41:31

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

我正在尝试找到一种检测给定图G是否具有两个不同的最小生成树的有效方法。我也试图找到一种方法来检查它是否有3种不同的最小生成树。我现在的天真解决方案是运行Kruskal算法一次并找到最小生成树的总重量。稍后,从图中移除边缘并再次运行Kruskal算法,并检查新树的权重是否是原始最小生成树的权重,对于图中的每个边都是如此。运行时是O(| V || E | log | V |),这根本不是很好,我认为有更好的方法。

任何建议都会有所帮助, 提前谢谢

3 个答案:

答案 0 :(得分:3)

您可以修改Kruskal算法来执行此操作。

首先,按重量对边缘进行排序。然后,对于每个重量的升序,过滤掉所有不相关的边。相关边缘在最小跨越森林的连通分量上形成图表。您可以在此图中计算生成树的数量。将产品放在所有权重上,并计算图表中最小生成树的总数。

如果您只关心一棵树,两棵树和三棵或更多树的情况,你可以恢复与Kruskal算法相同的运行时间。我认为你最终会做一个决定性的计算或者一般地计算生成树的东西,所以你可能最终会遇到O(MM(n))最坏情况。

答案 1 :(得分:1)

假设您有图表的MST T0。现在,如果我们可以获得另一个MST T1,它必须至少有一个边缘E与原始MST不同。从E丢弃T1,现在图表分为两个组成部分。但是,在T0中,必须连接这两个组件,因此这两个组件之间会有另一条边,其重量与E完全相同(或者我们可以用更重的一个替换另一个并得到一个较小的ST)。这意味着用E替换另一个边缘会给你另一个MST。

这意味着如果有多个MST,我们总是可以从MST改变一个边缘并获得另一个MST。因此,如果您要检查每个边缘,请尝试将边缘替换为具有相同权重的边缘,如果您获得另一个ST,则它是MST,您将获得更快的算法。

答案 2 :(得分:0)

假设G是一个具有n个顶点和m个边的图;任何边e的权重是W(e);并且P是G上的最小权重生成树,权衡成本(W,P)。

设δ=任意两个边权重之间的最小正差。 (如果所有边缘权重相同,则δ是不确定的;但在这种情况下,任何ST都是MST,因此无关紧要。)取ε使得δ> 0。 n·ε> 0.

当e在P中时,用U(e)= W(e)+ε创建一个新的权重函数U(),否则U(e)= W(e)。计算Q,U下的G的MST。如果成本(U,Q)<成本(U,P)则Q≠P。但是成本(W,Q)=通过构造δ和ε的成本(W,P)。因此,P和Q是W下的G的不同MST。如果Cost(U,Q)≥Cost(U,P)则Q = P并且W下的G的不同MST不存在。

上述方法确定是否存在至少两个不同的MST,在时间O(h(n,m))中,如果O(h(n,m))限定了找到M的GST的时间。

我不知道类似的方法是否可以治疗是否存在三个(或更多)不同的MST;它的简单扩展属于简单的反例。