我有一个未定义的图G =(V,E)和权重函数w:E-> R +。另外,我有G的MST T.
我必须构建一个执行以下操作的算法:
如果我们添加一个新的边缘e'具有权重w(e')到E的建议用一种算法来更新T,使其成为新图G的静音G = =(V,EUe')。
复杂性:O(V)。
我的建议是:
1)添加e'到T.我们得到一个新的图形称为T'包括一个周期
2)在T'上运行DFS;并标记您访问的每个顶点。另外还有
堆栈中的每个顶点和每个边缘权重
3)当我们访问已经访问过的顶点时,我们停止运行
4)并开始从堆栈中退出,直到我们到达我们停在的顶点
5)在撤销时我们保存了我们从中撤出的最大边缘权重
叠加。
6)如果最大边缘重量大于w(e')我们将它们替换掉
7)否则我们保持相同的T.
我希望它清楚 如果有人能帮我,或者给我其他的话,我将非常感激 解决方案和建议。
答案 0 :(得分:1)
是的,你建议的解决方案是正确的,因为具有相同边数和节点数的图(如T)包含一个简单的循环,其中树根植于此循环的某些节点(可能没有)。
您需要从T中删除1个边缘,以便剩余的图形仍然连接。显然,最好的选择是删除最大的边缘。在保持图形连接的同时可以删除的唯一边缘是循环中的边缘(您要添加到堆栈中的边缘)。
另一个解决方案是在图中找到bridges,然后找到最大的非桥边并删除它。但是,由于这是一个特殊的图形,因此您提到的解决方案会更容易(非桥边缘是循环中的边缘)。