Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如果删除一条边,如何从旧MST更新MST_Algorithm_Graph_Graph Theory_Minimum Spanning Tree - Fatal编程技术网

Algorithm 如果删除一条边,如何从旧MST更新MST

Algorithm 如果删除一条边,如何从旧MST更新MST,algorithm,graph,graph-theory,minimum-spanning-tree,Algorithm,Graph,Graph Theory,Minimum Spanning Tree,我正在学习算法,我看过这样的练习 我可以用指数时间解决这个问题,但是。我不知道如何证明这个线性时间O(E+V) 我将非常感谢您的帮助。当您删除其中一条边时,MST将分为两部分,我们将它们称为a和b,因此您可以做的是迭代零件a的所有顶点,并查找所有相邻边,如果任何边在零件a和零件b之间形成链接,则您已找到新的MST 伪代码: for(all vertices in part a){ u = current vertex; for(all adjacent edges of u){

我正在学习算法,我看过这样的练习

我可以用指数时间解决这个问题,但是。我不知道如何证明这个线性时间O(E+V)


我将非常感谢您的帮助。

当您删除其中一条边时,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’由两个相连的部件组成

让图中的每个节点都有一个组件ID。根据节点所属的组件为所有节点设置componentID。这可以通过一个简单的BFS来实现,例如在G'上。这是一个O(V)操作,因为G'只有V节点和V-2边

标记所有节点后,迭代所有未使用的边,并找到连接两个组件的权重最小的边(两个节点的组件将不同)。这是一个O(E)操作


因此,总运行时间为O(V+E)。

设G为嵌入最小生成树T的图;假设A和B是从T中移除(u,v)后剩下的两棵树

前提p:从重新连接A和B的G-(u,v)中选择最小权重边(x,y)。然后T'=A+B+(x,y)是G-(u,v)的MST

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不包含(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都不存在,所以t'必须是MST。量化宽松

算法
遍历A并将其所有顶点涂成红色。类似地,将B的顶点标记为蓝色。现在遍历G-(u,v)的边列表,以找到连接红色顶点和蓝色顶点的最小权重边。新的MST是这条边加上A和B。

可能重复了很好的解释,但我有一个问题,为什么“A'和B'分别跨越与A和B相同的顶点”而不是“A'和B'跨越与A和B相同的顶点”?@soulomoon Right。谢谢固定的。