证明用于查找最小生成树的贪婪算法肯定会停止

问题描述 投票:0回答:2

这是一种在连接的UN指向图G =(V,E)中查找最小生成树的算法:


  1. 初始化:B =∅ - 将由算法构建的边缘组
  2. 而| B | <| V | - 1做: 一个。选择图中的一些切割(S,V \ S),其中没有边缘e属于跨越它的B。 湾找到最轻的边缘交叉。 C。将其添加到组B. B =B∪{e}。
  3. 返回T =(V,B)

切割的含义在附图中描述:Cut's meaning顶点s,u在一个组中我们可以称为S.

所有其他顶点都在V \ S组中。

所以这就是(S,V \ S)作为切割的意思。另外 - 边缘(u,w)是交叉边缘 (u,v)是特定切口中最轻的交叉边缘。 (s,u)不是“交叉”边缘

我需要证明算法最终会停止。那| B | = | V | - 在某一点上1。

我可以在证明中使用以下说法:

'在算法的任何一点,都存在G的最小生成树T =(V,Et),它包含算法选择的边缘B组。

假设我已经证明了这一点,我需要以某种方式表明在图中总是有一些切口,他的交叉边缘都没有被添加到B中。 while | B | <| V | -1。但我不知道该怎么做

algorithm graph tree greedy minimum-spanning-tree
2个回答
0
投票

让我们假设没有这样的切割和| B | <| V | - 1.当树连接时,这意味着所有顶点都通过B中的某个边连接(因为如果没有连接顶点,将会有一个切口,其中没有边缘属于B,将该顶点和生成树分开)

作为,| V |顶点至少需要| V | - 要连接1个边,我们推断| B | > = | V | - 1,因此与我们的假设相矛盾。

因此证实。


0
投票

这个算法的任何部分都不能永远循环。步骤2循环的每次迭代都增加| B |由1. | B |将在| V | -1次迭代中达到| V | -1,此时循环终止。

如果您担心步骤2a不可能,则必须断开G的(V,B)子图,因为它没有足够的边连接。我们总是可以将一些连接组件放在切口的一侧,而另一侧放在另一侧。 (即使步骤2a在某些时候是不可能的,这听起来并不像非终止条件。)

© www.soinside.com 2019 - 2024. All rights reserved.