先决条件:
- 图及其表示
- 贪婪算法|设置5(Prim的最小生成树(MST))
- Kruskal的最小生成树算法贪婪的算法2
给定有向图D =
例子:
但是对于有向图,Prim的最小生成树和Kruskal的算法失败。让我们看看为什么
为什么Prim的有向图算法失败?
Prim的算法假定所有顶点均已连接。但是在有向图中,每个节点都不是每个其他节点都可以访问的。因此,Prim的算法由于这个原因而失败。
例如:
从图中可以看到,从节点4到节点都是无法到达的。有向图无法满足所有顶点都必须连接的要求。
为什么Kruskal算法对有向图失败?
在Kruskal的算法中,在每个步骤中,检查边缘是否形成了到目前为止已形成的生成树的循环。但是Kruskal算法无法检测到有向图中的循环,因为在某些情况下顶点之间没有循环,但是Kruskal算法假定它是循环的,并且没有考虑某些边,这是因为Kruskal算法对有向图而言失败了。
例如:
报告该图包含使用Union-Find方法的循环,但是该图没有循环。
有向图中最小生成树的等效项是,“最小生成树状化”(也称为最佳分支)可以通过运行时间为O(EV)的Edmonds算法求解。该算法是最小生成树问题的定向模拟。