先决条件:
- 图及其表示
- 贪心算法 |第 5 组(Prim 的最小生成树 (MST))
- Kruskal 的最小生成树算法 |贪婪算法2
给定一个有向图D = < V, E > ,任务是找到给定有向图的最小生成树
例子:
但是对于有向图,Prim 的最小生成树和 Kruskal 的算法失败了。让我们看看为什么
为什么 Prim 算法在有向图上失败?
Prim 的算法假定所有顶点都已连接。但是在有向图中,每个节点都不能从其他每个节点到达。因此,Prim 的算法由于这个原因而失败。
例如:
由于在图中可见,从节点 4 无法到达任何节点。有向图无法满足所有顶点都连接的要求。
为什么 Kruskal 算法对有向图失败?
在 Kruskal 算法中,在每一步中,检查边是否与到目前为止形成的生成树形成一个循环。但是 Kruskal 算法无法检测有向图中的循环,因为有些情况下顶点之间没有循环,但 Kruskal 算法假定它循环并且不考虑某些边缘,因此 Kruskal 算法无法用于有向图。
例如:
使用 Union-Find 方法将报告此图包含环,但此图没有环。
有向图中的最小生成树的等价物是,“最小生成树形”(也称为最优分支)可以通过 Edmonds 算法以 O(EV) 的运行时间求解。该算法是最小生成树问题的定向模拟。
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live