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

时间:2018-03-30 23:40:56

标签: algorithm graph tree greedy minimum-spanning-tree

这是一种用于在连接中查找最小生成树的算法 联合国指导的图G =(V,E):

  1. 初始化:B =∅ - 将由算法构建的边缘组

  2. while | B | < | V | - 1做:

    一个。选择图形中的一些切割(S,V \ S),其中没有边缘e属于跨越它的B。

    湾找到最轻的边缘交叉点。

    ℃。将其添加到组B.
     B = B∪{e}。

  3. 返回T =(V,B)

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

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

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

    我需要证明算法最终会停止。那| B | = | V | - 1 在某些时候。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

因此证明了。