Kruskal和Prim是否可以达到所有MST最小生成树?


13

我相信这是对的,但都未能获得正式证明。但是,通过应用Kruskal算法,是否可以达到任何最小生成树?同样,Prim算法是否正确?

编辑:更准确地说,我想知道是否为一个已连接的,无向的,加权的图指定了MST,是否可以保证使用Kruskal或Prim生成该MST的步骤是连续的。例如,当多个边缘具有相同的权重时,Kruskal有不同的选择。对于Prim也是如此。


2
与您可能想用作引理的另一个结果的相关答案和讨论。
拉斐尔

3
我的答案的第一部分针对Kruskal的算法证明了这一点,我认为类似的论点也适用于Prim的算法:stackoverflow.com/a/13779113/47984
j_random_hacker

Answers:


9

Raphael的评论j_random_hacker的评论所示,答案是肯定的。实际上,任何MST算法都可以达到任何MST,但有一些次要例外。

对于图,如果我们可以将由任一权重函数引起的边上的严格弱排序扩展到相同的严格,则将所有边上(对实数)的两个权函数定义为(弱)(彼此比较)总订单。也就是说,我们可以为每个权重函数设计一致的打破平局规则,以便通过一个权重函数及其平局决胜规则对任意两个边进行比较的结果与通过另一个权重函数及其平局而定的结果相同。违反规则。G

引理1:令和是两个权重函数。以下五个语句彼此等效。w 2w1w2

  1. w 2w1和是比较兼容的。w2
  2. 在任何一组边中,和有一个共同的最边。w 2w1w2
  3. 在任何一组边中,存在共同的最重边,即和。w 2w1w2
  4. 存在一个权重函数该分配不同的权重不同的边缘,使得是比较兼容的和。w 3 w 1 w 2w3w3w1w2
  5. 对于任何边缘和,以使比一个权重函数的轻,等于或小于另一个权重函数的。e 2 e 1 e 2 e 1 e 2e1e2e1e2e1e2

引理1的证明可以轻松完成。

引理2:设两个权重函数和使得如果,则。然后它们是可比较的。w 2 e 1 < w 1 e 2 e 1 < w 2 e 2w1w2e1<w1e2e1<w2e2

(提示)证明:一种方法是验证引理1的条件5。另一种方法是通过证明在任意一组边中,的最边也是的最边来验证引理1的条件2。,w 1w2w1

如果对于所有边上的任意两个(弱)比较兼容加权函数,我们可以使用一个加权函数以一种无需重复即可重复的方式运行该算法,则将图上基于比较的算法定义为比较兼容与其他重量功能。特别是,算法的这两次运行将具有相同的输出。G

请注意,大多数(如果不是全部)MST算法可以用两种形式陈述。第一种口味假定不同边缘具有不同的权重,当主要关注点是查找一个MST(实际上也是唯一的MST)时,将使用该特征。第二种风味使不同边缘具有相同的权重。当然,在这个答案中,主要关注的是找到所有MST,我们只关心第二种MST算法。GG

比较兼容的MST算法可以找到所有MST。

为了证明上述主张,我们只需要在计算 MST 数量时稍微修改“ Kruskal可以找到每个MST” 这一节。对于具有权重函数的任何MST,选择一个正权重,该正权重小于任意一对不等边权重之间的绝对差。如果我们从以为单位的每个边的权重中减去该权重而不更改其他边的权重,获得一个新的权重函数,即。如果边缘比轻由,必须大于轻由mGw1mw2e1e2w1e1e2w2也一样 通过引理2,和是比较兼容的。请注意,是的唯一MST 。(显示这种唯一性的一种方法是证明,只要减少一个MST边的权重,任何具有新权重函数的MST都必须包含该边。)因此,在上进行算法的任何运算将找到。因为该算法是比较兼容的,所以我们可以使用或以相同的方式运行该算法。由于该运行会发现独特的MST,与,它会找到以及与。w1w2mw2w2mw1w2mw2mw1

每个MST算法都是比较兼容的

上述主张听起来过于宽泛。好吧,对于每种MST算法,我指的是我所见过的任何基于比较的通用MST算法,但不包括那些明显的病态算法,例如错误的步骤或不必要的步骤。由于比较兼容的MST算法可以找到所有MST,因此每种MST算法都可以找到所有MST。特别是,四个经典的MST算法,即Borůvka的,普里姆的,克鲁斯卡的和反删除算法可以找到所有MSTS。

这是另外三种比较兼容的MST算法。

  • delete-heavy-edge算法。从所有边缘开始。反复找到一个循环并去除其最重的边缘之一,直到没有循环为止。
  • 加非重边算法。从空集开始。遍历所有边缘。添加每个边缘,如果形成循环,则删除其中最重的边缘之一。
  • 较浅边缘替换算法。从任何生成树。查找周期加上边缘不。如果该循环中的边沿比重,请从移除并将添加到。重复直到我们不能再减小的重量。TTeTtetTeTT

下面的MST算法不兼容。

  • 程度有偏的Kruskal算法,它是经过以下修改的Kruskal算法。假设当我们要从删除权重最小的边缘时,如Wikipedia对Kruskal算法的描述,我们有多个权重最小的边缘可供选择。我们选择删除的边将是其两个顶点的度数之和在所有选择中最大的边。该算法不能比较兼容,因为它没有找到MST与顶点的曲线图的,和边缘重量的和边重量的{ a b b c c d } a b c a b 1 b c c d d b 2S{ab,bc,cd}a,b,cab1bc,cd,db2。由于不必要的修改,该算法被认为是病理性的。

请注意,上述所有八种MST算法都是基于比较的。

如何显示一个比较兼容的算法?

我将以Kruskal算法为例。这是加权无向连通图上的Kruskal算法(第二种形式)的描述。G

  • 创建具有与相同的顶点但没有边的图因此,是一个由单个顶点分开的树木组成的森林。˚FFGF
  • 创建一个包含图形中所有边的集合S
  • 而为非空且尚未跨越 ˚FSF
    • 从选择权重最小的边。S
    • 从移除该边缘。S
    • 如果该边缘连接了两棵不同的树,则将其添加到森林,将两棵树合并为一棵树F
  • 输出。F

令和是上的两个比较兼容的权重函数。Kruskal算法仅在“从选择具有最小权重的边”的步骤中涉及权重函数。引理1的条件2告诉我们,我们可以在此步骤中选择一个共同的最亮边。然后,我们可以通过归纳轻松检查我们可以使用和以相同的方式运行所有步骤。因此,Kruskal的算法是比较兼容的。w 2 G S w 1 w 2w1w2GSw1w2

如果从广义上讲,可以用三种步骤来描述算法,则该算法是比较兼容的。

  1. 做一些不涉及体重的事情。
  2. 在给定的一组边中选择权重最小的边
  3. 在给定的一组边中选择权重最大的边

这个足够的条件涵盖了Borůvka,Prim,Kruskal,反向删除,delete-heavy-edge和add-non-heavy-edge算法。请注意,为了满足此充分条件,我们可能必须更改算法的某些描述,而不会影响可到达的MST集合。由于度偏的Kruskal算法是比较兼容的例外,让我强调一下,此充分条件是用宽松术语描述的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.