检查边缘是否包含在SOME MST中的线性时间(非不同值)

时间:2013-02-24 08:09:00

标签: algorithm minimum-spanning-tree

我正在研究一种算法,以检查给定边缘是否包含在所有可能的mst之一中。

对于这个问题,我们正在考虑非不同的值,并且我们的边e连接顶点A&乙

到目前为止,我有:如果一条路径可以从A到B组成,边缘的权重小于或等于我们边缘e的权重 - 我们可以说边缘e不是任何MST的一部分

我在这里遗漏了什么/关于更好的算法的想法吗?

编辑:

对涉及循环属性的解决方案有什么想法 - 所以,我们认为所有边缘的权重都小于我们正在考虑的边缘。如果我们可以使用这些边缘从A-> B创建路径,我们可以说它不是任何MST的一部分吗?

4 个答案:

答案 0 :(得分:21)

我们将使用MST cycle property来解决这个问题,它说:“对于图中的任何周期C,如果C的边e的权重大于C的所有其他边的权重,那么edge不能属于MST。“

现在,运行以下O(E+V)算法来测试连接顶点u和v的边E是否是某个MST的一部分。

第1步

从边缘E的一个端点(u或v)运行dfs,只考虑那些权重小于E的边缘。

第2步

案例1 如果在此dfs的末尾,顶点u和v连接,则边E不能是某些MST的一部分。这是因为在这种情况下,图中肯定存在一个周期,边E具有最大权重,并且它不能是MST的一部分(来自循环特性)。

案例2 但是如果在dfs u和v的末尾保持断开连接,那么边E必须是某些MST的一部分,因为在这种情况下,E总是不是它所属的所有周期中的最大权重边。

答案 1 :(得分:0)

假设A-B是你的图形而e是唯一的边缘。然后e是MST的一部分,但是有一条路径A-B足以满足您的条件。

即使你要求e不是这种路径的一部分,也是错误的。只需绘制A和B之间具有相同权重的两条边e1和e2的图形。

你还应该考虑一个图A-B-C,它有一个来自A-C的附加边,其中所有边都有一个权重。无论您移除哪个边缘,都可以获得最小的生成树。因此任何边缘都可以成为MST的一部分。

答案 2 :(得分:0)

如果从检查边缘的重量开始,实现O(n)限制将太难了。

为了检查一条边是否应该在MST中,你应该从检查是否在图中添加这条边创建一个循环开始,我们都知道MST不能有任何循环。

  • 如果确实如此,那么只需找出至少两条路线 路线的重量较轻。如果您的边缘e具有最小重量, 那么它应该在MST中,否则它只是一个边缘 形成一个周期加上并不是图表中包含的最佳边缘。

  • 如果没有,它必须在MST中,除非任何后来的边缘到来 发挥并击败现有的。

通过这样做,您可以实现O(n)时间检查是否边缘在MST中。

答案 3 :(得分:0)

我会写下关于这个问题的任何想法 循环属性在这里非常重要:任何循环中的最大边缘都不能位于最小生成树中。
为了证明循环属性,假设存在包含边e的最小生成树T,边e是循环中最大的成本边。然后我们可以删除树T中的边e,我们得到两个集S和T.然后循环必须包含除连接集S和T的e之外的一些边。然后从cut属性,边e可以' t在最小生成树中。

一旦我们获得了循环属性,我们就继续声明某些边e是否在最小生成树中:
当且仅当存在来自v和w的路径时,边e(v,w)才属于任何最小生成树,其中该路径上的每个边都小于e。

使用上述权利要求,算法如下:
删除大于e的所有边,现在我们有图G'。运行DFS以检查是否在G'中连接了v和w。如果v和w仍然连接,则边e不属于任何最小生成树。如果未连接v和w,则边e位于某个最小生成树中。