如何从图表中删除边缘后更新MST?

时间:2012-12-01 11:53:41

标签: algorithm graph edge minimum-spanning-tree

我有一个用邻接列表表示的图表和由父数组表示的MST。

我的问题是我需要从图中删除边并更新父数组。

我已经设法在以下情况下处理这些案件:

  1. 边缘不存在;
  2. 边缘在图形中但不在MST中(MST不会改变);
  3. 并且边缘是来自两个节点的唯一路径(在这种情况下,我返回null,因为 图未连接)。
  4. 当边缘处于MST并且图形中的边缘处于循环中时,我该怎么办?我需要在 O(n + m)复杂度

    中执行此操作

    我用红色写出边缘的成本。

1 个答案:

答案 0 :(得分:2)

只搜索最小距离路径 现在断开连接的树部分 到树的其余部分 在两者之间添加该路径 - 这是一条边。

说你原来的树是T.随着删除 在边缘,它现在被分成树T1和T2。

取其中一个 - 说T2。 入射到T2节点的每条边都是 在T2或是T2连接到T1。在这些当中 边缘入射到T2上的节点,选择其中的一个 ((其另一端位于T1节点)和 (在所有这些边缘中具有最低成本))。 搜索此边缘,例如e =(u,v),需要O(| E |)时间。如果分离的部分是叶子,则为O(| N |)。

如果有一棵树,比如T',成本低于T1 \ union T2 \ union {e}, 然后节点设置T1和T2的N1和N2将具有比仅一个边缘更多的互连,

,即在T'上会有两个或更多的边沿从N1中的节点开始并以N2中的节点结束。 否则,((T1和T2是最小的生成树,通过N1和N2)和(e是最便宜的 T1和T2之间的连接))将是错误的。但是,任何中间T1和T2都比e =(u,v)更昂贵 - 相互矛盾。

跳过一些证明细节。希望这可以帮助。