无向图和有向图的最小生成树算法有什么区别?

jortiz81

无向图MST算法(Prim或Kruskal)是有向MST算法(Edmond / Chiu)的一般形式吗?找到定向案例的MST源代码为何如此困难?我们可以使用无向解来获得有向图中的MST吗?

这与以下内容有关:为什么不能在有向图上使用Prim或Kruskal的算法?

templatetypedef

您的问题的核心似乎是什么使在有向图中找到MST(技术上称为最佳分支最小成本树状结构)与在无向图中找到MST相比变得不同,因此更难。

由于cut属性, Prim和Kruskal的算法都可以工作如果G =(V,E)是图,则对于G中的任何切割(S,V-S),如果存在穿过该切割的成本最低的边{u,v},则该边必须属于所有MST不幸的是,此属性在定向情况下不正确。这是一个反例:

      2
  A ----> B
  |      | ^
1 |  -99 | | 1
  |      v |
  +-----> C

在这里,以A为根的最小成本树状结构就是这个:

      2
  A ----> B
          |
      -99 |
          v
          C

但是,请查看切割({A},{B,C})穿过此切割的成本最低的边缘是边缘(A,C),但该边缘不会出现在以A为根的任何最低成本的树状结构中。

没有cut属性,Prim算法和Kruskal算法都将失败。尝试在此处给定的图形上运行Prim算法,从节点A作为包含的节点开始。您将添加边(A,C),然后添加边(C,B),从而得到次优的树状度。现在,尝试在此处运行Kruskal算法。您首先要添加边(B,C),然后添加边(A,C)。不幸的是,这实际上不是树状结构,因为它没有根节点。

实际上,用于寻找最小成本树状发光的标准算法(Edmonds-Chu)实际上可能更接近Boruvka算法Boruvka的算法的工作原理是为每个节点同时选择连接到该节点的成本最低的边,并将其添加到候选MST。然后,您可以将以此方式形成的所有CC压缩到单个节点中,并重复此过程,直到您拥有树为止。

在无方向情况下,只要边缘权重是不同的,该算法就永远不会引入循环(证明这一点是一个很好的练习),但是定向算法并非如此。上面给出的图形就是一个很好的例子-如果您尝试这样做,则从A中选择(A,C),从C中选择(C,B),从B中选择(B,C),形成循环(B,C ,B)。Edmonds-Chu算法使用的更正方法是通过将这些循环之一压缩到单个节点中,然后在精简图中重复此过程,并根据结果“解压缩”循环。从某种意义上讲,它与Boruvka的算法相似,但是进行了适当的修改。

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有向图和无向图有什么区别

来自分类Dev

有向图和无向图有什么区别

来自分类Dev

最小生成树(MST)和所有对最短路径(APSP)有什么区别?

来自分类Dev

Dijkstra是针对有向图还是无向图的算法?

来自分类Dev

根据二进制图像为最小生成树创建网络无向加权图

来自分类Dev

使用networkx的有向图的生成树

来自分类Dev

通过Prim算法获得的图的最小生成树

来自分类Dev

有向图和Kosaraju算法的DFS

来自分类Dev

无向图的A *算法

来自分类Dev

VBA 使有向图无向

来自分类Dev

带负边的有向无环图的Dijkstra算法

来自分类Dev

本体的图形布局算法(有向无环图)

来自分类Dev

确定有向图还是无向图是一棵树

来自分类Dev

在无向图的所有连接的组件的最小要素的总和

来自分类Dev

无向图的DFS树

来自分类Dev

一个图可能具有多个最小生成树

来自分类Dev

连接无向图的算法

来自分类Dev

类图和对象图有什么区别?

来自分类Dev

用例图和uml图有什么区别?

来自分类Dev

无向图的最小ID

来自分类Dev

有向无环图的函数定义

来自分类Dev

有向无环图的拓扑排序

来自分类Dev

选择单个有向无环图

来自分类Dev

连通无向无环图与树

来自分类Dev

从给定“根”的无向无环图创建有向无环图

来自分类Dev

关系图,ER图和EER图之间有什么区别

来自分类Dev

最小生成树只有叶子?

来自分类Dev

生成n个周期的有向图

来自分类Dev

最小生成树二维图