无向与有向图的最小生成树算法之间的区别是什么?

时间:2015-01-16 21:25:01

标签: algorithm graph tree graph-algorithm

无向图MST算法(Prim或Kruskal' s)是定向MST算法(Edmond / Chiu)的一般形式吗?为什么如此难以找到定向案例的MST源代码?我们可以使用无向解决方案在有向图中获取MST吗?

这与以下内容有关: Why can't Prim's or Kruskal's algorithms be used on a directed graph?

2 个答案:

答案 0 :(得分:11)

您的问题的核心似乎是在有向图中找到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's algorithm。 Boruvka算法通过为每个节点同时选择连接到该节点的最低成本边缘并将其添加到候选MST来工作。然后,您将所有以这种方式形成的CC合并为单个节点,并重复此过程,直到您拥有树。

在定向情况下,只要边缘权重不同,该算法就不会引入循环(这是一个很好的练习来证明这一点),但在定向算法中并非如此。上面给出的图是一个很好的例子 - 如果你试试这个,你从A中选择(A,C),从C中选择(C,B),从B中选择(B,C),形成循环(B,C) ,B)。 Edmonds-Chu算法使用的校正通过将这些循环之一收缩到单个节点中,然后在简化图中重复该过程并且不进行"基于结果的周期。在这个意义上,它与Boruvka的算法类似,但经过适当的修改。

希望这有帮助!

答案 1 :(得分:1)

我找到了一些不错的slides,其中包含对差异的清晰解释以及清晰的数字和示例