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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了证明用于查找最小生成树的贪婪算法肯定会停止相关的知识,希望对你有一定的参考价值。

这是一种在连接的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。但我不知道该怎么做

答案

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

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

因此证实。

另一答案

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

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

以上是关于证明用于查找最小生成树的贪婪算法肯定会停止的主要内容,如果未能解决你的问题,请参考以下文章

Prim算法详解

Prim算法求最小生成树

关于最小生成树的一切

查找最小生成树:克鲁斯克尔算法(Kruskal)算法

最小生成树的Prim算法

求最小生成树的kruskal算法