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

向图中添加新边并寻找新的生成树

江天宇
2023-03-14

假定给定一个给定图G(有n个顶点和m条边)的最小生成树T和一个新边e=(u,v),它的权重为w。

(I)检验T是否为MST;(II)如果不是,给出了求图G+E的最小生成树的有效算法。

共有1个答案

羊舌青青
2023-03-14

您当前的MSTt包含n-1边。添加到图中的新边E=(u,v)具有权W在图T+E(T具有边E添加)中只创建一个循环C。如果新的边权重(W)小于此周期中权重最高的边的权重C,则可以通过将权重较高的边替换为E来创建权重较低的MST。否则,当前MST将保持最佳状态。

算法基本上是这样的:

  • T
  • 中查找从 UV的唯一路径 P
  • P中查找具有最大权重W*
  • 的边 E*
  • 是否w
    • 如果是这样,则T'=T-e*+eG+e
      的MST,且weight(T')=weight(T)-w*+w
    • 如果不是,则t'=tG+E
    • 的MST

 类似资料:
  • 我是图的新手,我正试图在Java解决这个问题: 给定一个具有N个节点和N-1条带权的双向边的图,如果一条新边q允许减少图的总权重,算法必须响应是,否则不允许。 如果存在边“e”,则边“q”满足这个条件,使得可以用“q”替换“e”,从而使图连通并减小其总权重。 我用邻接列表实现了图: 边缘类: 和图形类: 有没有一个算法我可以用来解决问题?

  • 问题内容: 我有以下SQL命令: 我希望能够使该列唯一,并且我希望它能够在每次向表中添加一行时生成一个新的guid。此列不是IDENTITY列,因为我已经有一个。这是分开的东西。我将如何将该列添加到已经有用户的表中。 问题答案: 看到这个例子: 要在填充的表格上添加一个非null字段,您需要这样做。

  • 设G=(V,E)是无向图。如果G的每个圈在F中至少有一条边,则称边集F E为反馈边集。 a)最小尺寸反馈边集:由于图是无权的,我们可以使用DFS。我们像往常一样从任意顶点开始DFS。当我们遇到一个后边时,我们将它插入反馈边集。当DFS完成时,该集将是答案。 b)最小权重反馈边集:由于图是加权的,我们可以使用Kruskal。但是Kruskal通常从最小权重的边开始。如果我们可以否定所有的边权重,然后

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

  • 我有一个基于泽西(1. x)的REST服务。它使用Jackson 2.4.4生成JSON响应。我需要在响应的末尾添加一个换行符(cURL用户抱怨响应中没有新行)。我使用泽西漂亮打印功能()。 当前: 通缉: > 我尝试使用自定义序列化程序。我只需要在根对象的末尾添加。序列化器是按数据类型定义的,这意味着,如果此类类的实例嵌套在响应中,我将在JSON的中间获得。 我想到了子类化,覆盖,在其中我将添加

  • 我需要找到一个算法来找到有向图中的所有根,在O(n m)。 我有一个寻找单个根的算法: 在v中的某些v上运行DFS(v)。如果结果是一个生成树,则v是根。否则,结果就是树木成林。然后: 在最后一棵树的根上运行DFS(u)。如果结果是一棵生成树,那么u是根。否则,图中没有根 现在,如果我想找到所有的根,最好的方法是每次在最后一棵树的不同顶点上运行上述算法O(n)次吗?假设我找到了一个根,如果另一个根