【问题标题】:What's the difference between the minimum spanning tree algorithm for undirected vs directed graphs?无向图和有向图的最小生成树算法有什么区别?
【发布时间】:2015-03-15 14:10:57
【问题描述】:

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

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

【问题讨论】:

  • 我已经编辑了你的问题,删除了关于寻找一个好的图书馆的问题,因为这些问题在 Stack Overflow 上不是主题。不过,你剩下的问题真的很有趣,所以我会试着回答一下。

标签: algorithm graph tree graph-algorithm


【解决方案1】:

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

由于 cut 属性,Prim 和 Kruskal 的算法都有效。如果 G = (V, E) 是一个图,那么对于 G 中的任何割 (S, V - S),如果有一条最小成本边 {u, v} 穿过该割,则该边必须属于所有 MST G. 不幸的是,这个性质在有向的情况下不成立。这是一个反例:

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

这里,植根于 A 的最小成本树状结构是这个:

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

但是,看看切割 ({A}, {B, 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 ,乙)。 Edmonds-Chu 算法使用的校正通过将这些循环之一收缩到单个节点中来工作,然后在简化图中重复此过程并根据结果“解压缩”循环。从这个意义上说,它类似于 Boruvka 的算法,但进行了适当的修改。

希望这会有所帮助!

【讨论】:

  • 我的经验是,虽然需要一段时间去理解,但这些算法的原始对偶(线性规划)解释清楚地说明了它们之间的联系。
  • 我很喜欢在这里浏览以回答一些问题并找到一个很好的答案,它让我无需尝试就能学到很多东西。可悲的是,这种答案通常不会得到很多支持。希望我能投票多次。
  • @DavidEisenstat 在我从未深入学习过的许多东西中,有很多东西是如何从原始对偶的角度来处理算法的。您有什么好的资源可以让我查看以了解更多信息吗?
  • @templatetypedef These lecture notes 似乎很合理,尽管它们确实需要一定的线性编程流利度。
  • @DavidEisenstat 谢谢,那些看起来很棒。幸运的是,我确实有线性规划的背景(我参加了一个课程,我们做了一些原始对偶算法)。我可以尝试解决这些问题,看看是否可以更好地处理事情。
【解决方案2】:

我找到了一些不错的 slides,对差异进行了很好、清晰的解释,并附有清晰的数字和示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-20
    • 2011-02-17
    • 2016-10-16
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多