Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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_Algorithm_Graph_Graph Algorithm_Genetic Algorithm_Minimum Spanning Tree - Fatal编程技术网

Algorithm 无向图中的MST

Algorithm 无向图中的MST,algorithm,graph,graph-algorithm,genetic-algorithm,minimum-spanning-tree,Algorithm,Graph,Graph Algorithm,Genetic Algorithm,Minimum Spanning Tree,我有一个未定价图G=(V,E)和权重函数w:E->R+。还有,我的MST是G 我必须构建一个算法,该算法如下: 如果我们向e添加一条新边e',该边的权重为w(e')。建议一种算法更新T,使其成为新图G'=(V,EUe')的MST。 复杂性:O(V) 我的建议是: 1) 将e'添加到T。我们得到一个新的图形,称之为T',其中包括一个循环。 2) 在T'上运行DFS并标记您访问的每个顶点。此外,还可以保存 堆栈中的每个顶点和每个边的权重。 3) 当我们访问已访问的顶点时,我们将停止运行。 4) 然后

我有一个未定价图G=(V,E)和权重函数w:E->R+。还有,我的MST是G

我必须构建一个算法,该算法如下:
如果我们向e添加一条新边e',该边的权重为w(e')。建议一种算法更新T,使其成为新图G'=(V,EUe')的MST。
复杂性:O(V)

我的建议是:

1) 将e'添加到T。我们得到一个新的图形,称之为T',其中包括一个循环。
2) 在T'上运行DFS并标记您访问的每个顶点。此外,还可以保存
堆栈中的每个顶点和每个边的权重。
3) 当我们访问已访问的顶点时,我们将停止运行。
4) 然后开始从堆栈中退出,直到到达停止的顶点。
5) 在提取时,我们保存最大边缘重量,并从 堆叠。
6) 如果最大边缘重量大于w(e'),我们将替换它们。
7) 否则,我们将保持相同的T

我希望它是清楚的。
如果有人能告诉我它是否有效,或者给我其他的,我将不胜感激

解决办法和建议

是的,您建议的解决方案是正确的,因为具有相同边数和节点数(如T)的图由一个简单循环组成,其中树在该循环的某些节点(可能没有)生根

您需要从T中恰好删除一条边,以便剩余的图形仍然是连接的。显然,最好的选择是删除最大的边。在保持图形连接的同时,唯一可以删除的边是循环中的边(添加到堆栈中的边)

另一个解决方案是在图中找到最大非桥边,然后找到最大非桥边并将其删除。但是,因为这是一个特殊的图,所以您提到的解决方案要容易得多(非桥边是循环中的边)