【发布时间】:2016-03-22 00:43:50
【问题描述】:
我正在研究算法,我见过这样的练习
我可以用指数时间解决这个问题,但是。我不知道如何证明这个线性时间 O(E+V)
我将不胜感激。
【问题讨论】:
标签: algorithm graph graph-theory minimum-spanning-tree
我正在研究算法,我见过这样的练习
我可以用指数时间解决这个问题,但是。我不知道如何证明这个线性时间 O(E+V)
我将不胜感激。
【问题讨论】:
标签: algorithm graph graph-theory minimum-spanning-tree
令 G 为嵌入最小生成树 T 的图;令 A 和 B 为从 T 中移除 (u,v) 后剩下的两棵树。
前提P:从重新连接A和B的G - (u,v)中选择最小权重边(x,y)。那么T' = A + B + (x,y)是G - (u ,v)。
P 的证明:很明显 T' 是一棵树。假设它不是最小值。然后会有一个 MST - 称之为 M - 重量更小。 M 要么包含 (x,y),要么不包含。
如果 M 包含 (x,y),则它必须具有 A' + B' + (x,y) 的形式,其中 A' 和 B' 是跨越与 A 和 B 相同的顶点的最小权重树。这些重量不能小于 A 和 B,否则 T 不会是 MST。所以 M 不小于 T' 毕竟是矛盾的; M 不存在。
如果 M 不包含 (x,y),则在 M 中存在从 x 到 y 的其他路径 P。P 的一条或多条边从 A 中的一个顶点传递到 B 中的另一个顶点。称这样的一条边为 c .现在,c 至少具有 (x,y) 的权重,否则我们会选择它而不是 (x,y) 来形成 T'。注意 P+(x,y) 是一个循环。因此,M - c + (x,y) 也是一棵生成树。如果 c 的权重大于 (x,y),那么这棵新树的权重将小于 M。这与 M 是 MST 的假设相矛盾。再次 M 不能存在。
由于在任何一种情况下,M 都不存在,所以 T' 必须是 MST。量子力学
算法 遍历 A 并将其所有顶点着色为红色。同样将 B 的顶点标记为蓝色。现在遍历 G - (u,v) 的边列表,找到连接红色顶点和蓝色顶点的最小权重边。新的 MST 就是这条边加上 A 和 B。
【讨论】:
当您删除其中一条边时,MST 会分成两部分,我们称它们为 a 和 b,因此您可以做的是遍历部分 a 中的所有顶点并查找所有相邻的边缘,如果任何边缘在部件a 和部件b 之间形成链接,则您已找到新的 MST。
伪代码:
for(all vertices in part a){
u = current vertex;
for(all adjacent edges of u){
v = adjacent vertex of u for the current edge
if(u and v belong to different part of the MST) found new MST;
}
}
复杂度为 O(V + E)
注意:您可以保留一个简单的数组来检查顶点是否位于 MST 的 a 部分或 b 部分。
还要注意,为了获得 O(V + E) 复杂度,您需要有一个图的邻接表表示。
【讨论】:
假设您在删除边缘后有图 G'。 G' 由两个连通分量组成。
让图中的每个节点都有一个componentID。根据节点所属的组件设置所有节点的组件ID。这可以通过简单的 BFS 来完成,例如在 G' 上。这是一个 O(V) 操作,因为 G' 只有 V 个节点和 V-2 个边。
一旦所有节点都被标记,遍历所有未使用的边并找到连接两个组件的权重最小的边(两个节点的组件ID 将不同)。这是一个 O(E) 操作。
因此总运行时间为 O(V+E)。
【讨论】: