这是一种用于在连接中查找最小生成树的算法 联合国指导的图G =(V,E):
初始化:B =∅ - 将由算法构建的边缘组
while | B | < | V | - 1做:
一个。选择图形中的一些切割(S,V \ S),其中没有边缘e属于跨越它的B。
湾找到最轻的边缘交叉点。
℃。将其添加到组B.
B = B∪{e}。
返回T =(V,B)
切割的含义在附图中描述: 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。 但我不知道该怎么做
答案 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,因此与我们的假设相矛盾。
因此证明了。