确定在线性时间内是否存在包含给定边的MST

时间:2013-03-02 11:26:43

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

设G =(V,E)是加权,连通和无向图,并且e是E中的任何边。 显示线性时间算法,该算法决定是否存在包含边e的最小生成树。

我设法找到问题1的一个奇怪的“解决方案”,它似乎有效,但我不认为它是线性的:

他们建议对每个边缘(u,v)使用union find和do Union(u,v),使得W(u,v)<我们)。现在,假设e =(x,y)。现在如果find(x)!= find(y)那么x和y没有连接,而W(e)肯定是Kruskal算法将要检查的下一个权重,所以肯定存在一个包含边缘的MST即

另一方面,如果find(x)= find(y),那么如果我们运行Kruskal算法到此点,x和y肯定会连接,所以我们不能将边e添加到任何MST(并且它已知通过操纵具有相同权重的边的排序顺序 - Kruskal的算法可用于创建任何MST。)

我不明白为什么这是线性的?是不是因为工会会花费O(| E | alpha(| V |))?

也许在线性时间有另一种方法可以做到这一点?

提前致谢

1 个答案:

答案 0 :(得分:3)

如果我们将Kruskal的算法用于“this”点,标记到目前为止构建的连接组件,并将所有丢弃的边缘添加回来,每个连接的组件仍将包含与之前相同的所有顶点(丢弃的边缘仅添加循环,而不是连接不同的组件)。因此,我们只需要检查 e 是否连接两个不同的连接组件,这些组件由边缘严格比 e 组成。查找连接的组件是线性时间工作。