在什么情况下Kruskal没有达到最低要求?

时间:2019-03-21 14:30:45

标签: algorithm minimum-spanning-tree kruskals-algorithm

由于Kruskal算法是贪婪方法,这意味着我们有时可能不会获得真正的最小路径。

但是有人能说明这种算法没有达到最小值吗?

我不是在寻找复杂性,只需要一个确实没有最佳解决方案的案例。

谢谢

1 个答案:

答案 0 :(得分:0)

我认为Kruskal的算法将始终找到最佳解决方案。它甚至适用于边成本为负的图形。 名为 Algorithm Design 的教科书中有一个关于Kruskal贪婪算法的最优性的证明: 考虑Kruskal算法添加的任何边e =(v,w),令S为v在添加e之前具有路径的所有节点的集合。显然v∈S,但是w̸∈S,因为加e不会产生循环。而且,还没有遇到从S到V-S的边,因为可以在不创建循环的情况下添加任何这样的边,因此可以通过Kruskal的算法来添加。因此,e是最便宜的边,其一端在S中,另一端在V-S中,因此它属于每个最小生成树。 因此,如果我们可以证明Kruskal算法的输出(V,T)实际上是G的生成树,那么我们就可以完成。显然(V,T)不包含循环,因为该算法经过明确设计,可避免产生循环。此外,如果未连接(V,T),则将存在节点S的非空子集(不等于V的全部),使得从S到V -S不存在边。但这与算法的行为相矛盾:我们知道,由于连接了G,因此S和V-S之间至少有一条边,并且该算法将添加遇到的第一个边。