繁体   English   中英

通用最小生成树

[英]Generic minimum spanning tree

我正在阅读有关Cormen的最小生成树的信息。 以下是通用最小生成树。

假设我们有一个连通的,无向的图G =(V,E),其权重函数为w:E-> R,我们希望找到G的最小生成树。在这里,我们使用贪婪方法。 此贪婪策略由以下“通用”算法捕获,该算法一次将最小生成树扩展到一个边缘。 该算法管理一组边A,从而保持以下循环不变性。

在每次迭代之前,A是某个最小生成树的子集。

GENERIC-MST(G,w) 
A = NULL
while A is not a spanning tree 
  do find an edge (u, v) that is safe for A 
  A = A ∪ {(u, v)}
end while

return A

问题

  1. 作者在不变量中表示“ A”是某个最小生成树的子集是什么意思? 这句话中的“一些”是什么? 我教过只有一个MST。

  2. 在上面的伪代码中,作者所说的“ A不是生成树”是什么意思? 即,while循环如何以及何时退出?

  3. 在“一些”最小生成树的伪代码中,这里我的理解只是一个。 我对吗?

有人可以用一个小例子来解释吗?

谢谢!

1.绝对不会。 MST不一定是唯一的。 例如:

所有边缘的重量均相等。

u --- v
|     |
|     |
w --- x

上图通过删除任何边具有4个MST。

2. G = (V,E)的生成树T = (V,e)使得|e| = |V|-1 |e| = |V|-1

3.没有

  1. 说图的生成树是唯一的时,您是对的。 但这是图形的所有边长都不同的情况。 正如上面的答案所解释的,具有相等边长的图可以具有许多不同的生成树(当然,它们全都具有相同的总权重)。
  2. 当您在生成树中包含图的所有顶点时,会存在while循环。 为此,您可以在while循环中添加一个检查。
  1. 根据@davin错误

  2. 该算法将保持您拥有森林的不变性,但是在您添加足够的边缘之前,森林不会跨越图形。 因此,您必须继续添加边,直到没有一个边安全为止(这时循环中断)。

  3. 见1。

  1. 这是错误的。 即使只有两个边相等,图也可能具有许多MST。

  2. A不是最小生成树,原因是:

    2.1首先, A不是树-它是断开连接的。

    2.2不跨越图形

    满足以上条件时,循环将退出

  3. 正确地说,它存在于某些 MST中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM