Algorithm 子图上的MST递归构造

Algorithm 子图上的MST递归构造,algorithm,graph,minimum,greedy,Algorithm,Graph,Minimum,Greedy,MST表示:最小生成树 给定一个图g=(V,E)。将顶点任意划分为两个不相交集V1和V2。 设E1为V1中两个顶点的所有边 设E2为V2中两个顶点的所有边 设E3为所有边,V1中有一个事件,V2中有一个事件 现在在子图(V1,E1)上构造一个MST M1,在子图(V2,E2)上构造一个MST M2。然后在E3中添加连接M1和M2的最低权重边。这是在原始图g上构造MST的结果吗?我的答案是否定的 考虑图G:{顶点:{A,B,C,D}边:{AB=1,BD=10,DC=3,AC=2}}。当它被划分为V

MST表示:最小生成树

给定一个图g=(V,E)。将顶点任意划分为两个不相交集V1和V2。 设E1为V1中两个顶点的所有边 设E2为V2中两个顶点的所有边 设E3为所有边,V1中有一个事件,V2中有一个事件

现在在子图(V1,E1)上构造一个MST M1,在子图(V2,E2)上构造一个MST M2。然后在E3中添加连接M1和M2的最低权重边。这是在原始图g上构造MST的结果吗?

我的答案是否定的

考虑图G:{顶点:{A,B,C,D}边:{AB=1,BD=10,DC=3,AC=2}}。当它被划分为V1={A,C}V2={B,D}E1={AC}E2={BD}E3={AB,CD}时,根据描述,MST是{AC,AB,BD},而真正的MST是{AB,AC,CD}

回想一下Kruskal算法:边是按权重按升序排序的,这些边不会形成一个循环,MST中已经存在的边将逐个添加。MST是树,因此将选择| E |-1条边(假设MST中没有孤立顶点)。如果| E1 |<| V1 |-1或| E2 | 1,那么当Kruskal算法在整个图G上实现时,E3中的多条边将被添加到MST。如果MST是从M1 M2和E3中的最小边构造的,它可能会丢失一些边

此外,如果我们在整个图G上实现Kruskal算法,则可能会添加多条E3中较小的边(我们称之为E3')。如果我们在V1 E1和V2 E2上分别实现Kruskal算法,则大于E3'中的边将添加到M1,M2中。并且只会添加E3(E3')中的最小边。因此,第二个MST的总重量大于第一个MST,它不是真正的MST

是否有单独建立MST的情况,与在整个图表上建立MST的情况相同

  • 当E3只有一条边时:

    当Kruskal算法在整个图G上实现时,此边将添加到MST,因为它不与任何边形成循环。它不会影响任何其他边上的决策

  • 当M1、M2都是连通树时,它们没有隔离 顶点和E3中至少| E3 |-1条边是中的最大边 E

    当Kruskal算法在整个图上实现时,E3中的最小边将添加到MST中。它不影响在其之后添加的E1或E2中的任何其他边上的判定。因为它不会与E1或E2中的任何边形成循环。E3中的其他边不会被添加,因为它们是Kruskal算法中要考虑的最后一条边,它们将与MST中已经存在的边形成一个循环