📌  相关文章
📜  为什么 Prim 和 Kruskal 的 MST 算法对有向图失败?

📅  最后修改于: 2021-10-26 06:00:53             🧑  作者: Mango

先决条件:

  • 图及其表示
  • 贪心算法 |第 5 组(Prim 的最小生成树 (MST))
  • Kruskal 的最小生成树算法 |贪婪算法2

给定一个有向图D = < V, E > ,任务是找到给定有向图的最小生成树

例子:

但是对于有向图,Prim 的最小生成树和 Kruskal 的算法失败了。让我们看看为什么

为什么 Prim 算法在有向图上失败?

Prim 的算法假定所有顶点都已连接。但是在有向图中,每个节点都不能从其他每个节点到达。因此,Prim 的算法由于这个原因而失败。
例如:

由于在图中可见,从节点 4 无法到达任何节点。有向图无法满足所有顶点都连接的要求。

为什么 Kruskal 算法对有向图失败?
在 Kruskal 算法中,在每一步中,检查边是否与到目前为止形成的生成树形成一个循环。但是 Kruskal 算法无法检测有向图中的循环,因为有些情况下顶点之间没有循环,但 Kruskal 算法假定它循环并且不考虑某些边缘,因此 Kruskal 算法无法用于有向图。
例如:

使用 Union-Find 方法将报告此图包含环,但此图没有环。

有向图中最小生成树的等价物是,“最小生成树状分布”(也称为最优分支)可以通过 Edmonds 算法以 O(EV) 的运行时间求解。该算法是最小生成树问题的定向模拟。

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。