当前位置: 首页 > 知识库问答 >
问题:

寻找跨越给定最小生成树的最小权完备图

卫博雅
2023-03-14

设T=(V,E)是一棵V顶点和E=V-1边的树,代价已知。我们想构造一个最小权完备图G=(V,E'),它的唯一最小生成树是T。

示例:考虑下面的树T,红色边具有给定的代价。将添加虚线边以从这棵树构造一个完整的图。

作为其唯一MST而跨越T的最小权完备图G如下所示:

2)对MST的所有其他边E_i,权重W_i,按权重递减的顺序重复。进行只包括E_i而不包括其他MST边的切割。此切割的任何未知非MST边的权重应为W_i+1

问题:

1)上述算法正确吗?根据割的性质,应该正确。

1)使用并查找,通过代价递增迭代所有MST边,统一同一分量下的对应顶点。

2)在每一步中,两个不同的组件通过成本w的边统一起来。在同一(新)组件内形成循环的任何其他边的成本都应该为w+1

共有1个答案

弘康安
2023-03-14

回答我自己的问题

下面是我想出的一个有效的答案,也是根据@Sasha的反馈。假设我们想计算完全图G的总权,即;

设T=(V,E)是由V个顶点和E=V-1条边组成的树,且权值已知。计算最小权重完全图G=(V,E')的总权W_total,该图跨越T作为其唯一的最小生成树。注意:边缘权重是自然数。

    null
for all vertices v1 in set1
  for all vertices v2 in set2
    create edge e = (v1, v2); ignore if edge is the MST edge
    w_e = w_mst_edge + 1

所以运行时间变成O(E+V*logV)=O(V^2),因为在完全图G中我们有E=V*(V-1)/2条边。

 类似资料:
  • 我正试图从一个加权无向图中找到跨越三的次优最小值。我知道如何使用Kruskal算法计算MST,我想用这种方法找到第二好的最小算法: 步骤: > 对所有图形边进行排序。 使用Kruskal计算MST 从不在第一个MST中的图中获取最小权重边,并将其添加到MST中(现在MST有一个循环) 在新形成的循环中移除最大重量边 这应该是第二好的MST吧? 顺便说一句,我知道这里有一个主题,指出了一个算法,它在

  • 假设所有边的权值都为正,那么通过对每条边的,然后应用Kruskal或Prim得到最小乘积生成树。但如果某些权重为负值,我们就不能应用这个程序。因为我们需要包含奇数个负边,而这些边必须具有最大的权重。在这种情况下怎么办?

  • 问题: 给定 N 个节点和 M 条边的图形,边的索引范围为 1 - 你需要为M条边分配权重。权重在[1...M],并且每个数字只能出现一次。 简而言之,答案应该是[1]的置换数组...M],其中arr[i] = x表示edge[i]的权重为x。 你得到了一个由n-1条边组成的集合。R保证是图的生成树。 找到一种分配权重的方法,使R是图的最小生成树,如果有多个答案,则打印具有最小字典顺序的答案。 约

  • 主要内容:生成树,最小生成树数据结构提供了 3 种存储结构,分别称为线性表、树和图,如图 1 所示。 图 1 3 种存储结构 a) 是线性表,b) 是树,c) 是图。 在图存储结构中,a、b、c 等称为顶点,连接顶点的线称为边。 线性表是最简单的存储结构,很容易分辨。树和图有很多相似之处,它们的区别是:树存储结构中不允许存在环路,而图存储结构中可以存在环路(例如图 1 c) 中,c-b-f-c、b-a-f-b 等都是环路)。

  • 假设我选择V(H)={a,e,f}和e(H)={ae,af,fe} 现在,对于每条边e∈e(H),我们用e'记下了(来自原始图G的) 达到这个最小值的边。所以E'={bc,df,eg},因为bc=4,df=9,eg=8,是连接我的元件的最小边。我在H中有一个相对于代价函数C′的最小生成树,而a′是这棵树的边集。 但是我的A'的边和E'的没有一条是一样的。

  • 在加权无向图中,我需要找到一个包含给定边“e”的最小生成树,如果可能的话。我该怎么做呢?Kruskal从“e”开始?