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

📅  最后修改于: 2021-04-29 09:35:35             🧑  作者: Mango

先决条件:

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

给定有向图D = ,任务是找到给定有向图的最小生成树

例子:

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

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

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

从图中可以看到,从节点4到节点都是无法到达的。有向图无法满足所有顶点都必须连接的要求。

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

报告该图包含使用Union-Find方法的循环,但是该图没有循环。

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