您问题的核心似乎是在有向图中找到 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 的算法,但进行了适当的修改。
希望这会有所帮助!