为什么Kruskal的算法如果贪婪的话会找到最小的生成树?

时间:2016-12-10 02:42:09

标签: graph-algorithm greedy

为什么Kruskal的算法在贪婪的情况下找到最小生成树?最小生成树不是全局优化问题吗?贪婪的一点是,你有可能找不到最优的解决方案吗?那么Kruskal如何能够在贪婪的同时找到最小的生成树?

4 个答案:

答案 0 :(得分:2)

好的,我们假设你是对的,所以Kruskal的算法并没有找到最佳解决方案。让解决方案通过Kruskal的算法S找到,并找到最优解T

e = (u, v)上必须有一条边S,但T上没有。{1}}。由于T是生成树,因此节点u和节点v之间必须存在路径。

现在,我们应该注意到路径u-v上的至少一个边的权重不小于e。否则,Kruskal算法会选择路径u-v上的所有边而不是边e

这意味着,如果我们删除该边缘并在解决方案e上添加T,则解决方案不会变得更糟。而且我们假设T是最优的,在此更改之后,树仍然是最优的。如果我们反复应用此逻辑,我们总是可以S

答案 1 :(得分:0)

我不确定你的意思。

然而,维基百科说:

Kruskal算法是一种最小生成树算法,它可以找到连接森林中任意两棵树的最小权重边缘。[1]它是图论中的一种贪婪算法,因为它找到了连通加权图的最小生成树,在每一步增加了成本弧。[1] 这意味着它找到形成包含每个顶点的树的边的子集,其中树中所有边的总权重最小化。如果图未连接,则它找到最小生成林(每个连接组件的最小生成树)。

与此同时,关于最小生成树,维基百科说:

最小生成树(MST)或最小权重生成树是连接的边缘加权无向图的边缘的子集,其将所有顶点连接在一起,没有任何周期并且具有最小可能的总边缘权重。也就是说,它是一个生成树,其边缘权重之和尽可能小。更一般地说,任何无向图(不一定连接)都有一个最小生成林,它是连接组件的最小生成树的并集。

结合这两个:Kruskal基本上使用贪婪的搜索方法找到最小的生成树或森林。

答案 2 :(得分:0)

我可以将这些问题理解为以下问题 - 贪婪并不总是最优的,那么为什么Kruskal算法能够获得最优解? 所以这个问题可以分两部分来解答 -

<强> 1。 Kruskal算法是否提供最佳解决方案? @miheyan已经回答了这个问题。

<强> 2。如果贪婪总是提供最佳解决方案? 一般来说, NO ,贪婪总是不能给出最优解,但是有一系列问题,贪婪方法给出了最优解,Kruskal算法就在那个集合中。

让我们来一个问题陈述 - 有两个玩家(玩家A和玩家B)被给予一堆不同面额的钱。我们假设有4种货币纸币,其值为-1,50,20,10。玩家将一次选择一种货币纸币,他们会选择另一种货币纸币。玩家A开始游戏。获胜者将是获得更多金钱的人。两位球员都能获得最佳表现。谁将赢得比赛? 现在尝试用贪婪的方法解决这个问题,看看贪婪的方法是否提供了最佳解决方案?采取不同的价值观,不同的例子,做你的家庭工作。

所以底线是 - 对于一系列问题贪婪的解决方案始终是最佳的,但不是所有问题。 希望它有所帮助!

答案 3 :(得分:0)

有些一些贪婪算法会产生全局最优解。有一些贪婪的算法则没有。 Kruskal的算法恰好在第一类中(这需要标准答案,如其他答案所示)。