我正在寻找一种有效的方法来检测给定图G是否有两个不同的最小生成树。我也在尝试找到一种方法来检查它是否有3个不同的最小生成树。我想到的一个朴素解法是先运行Kruskal算法,找到最小生成树的总权重。然后,从图中删除一条边,再次运行Kruskal算法,并检查新树的权重是否与原始最小生成树的权重相同,如此逐个检查每条边。这种方法的运行时间为O(|V||E|log|V|),效率不高,我认为应该有更好的方法。
任何建议都将有所帮助,谢谢!
假设G是一个具有n个顶点和m条边的图;任何边缘e的权重为W(e);P是G上的最小权重生成树,其权重为Cost(W,P)。
令δ = 任意两个边缘权重之间的最小正差异。 (如果所有边缘权重相同,则δ不确定;但在这种情况下,任何ST都是MST,因此无关紧要。)取ε使得δ > n·ε > 0。
创建一个新的权重函数U(),其中U(e)=W(e)+ε当e在P中时,否则U(e)=W(e)。计算G在U下的MST Q。如果Cost(U,Q) < Cost(U,P),则Q≠P。但是由于δ和ε的构造,Cost(W,Q) = Cost(W,P)。因此,在W下,P和Q是G的不同MST。如果Cost(U,Q) ≥ Cost(U,P),则Q=P,W下不存在不同的MST。
以上方法确定是否至少存在两个不同的MST,如果O(h(n,m))限制了找到G的MST的时间,则时间复杂度为O(h(n,m))。
我不知道是否有类似的方法可以处理是否存在三个(或更多)不同的最小生成树;它的简单扩展会遇到简单的反例。