📜  求解最小生成树(Kruskal 和 Prim)的问题

📅  最后修改于: 2021-10-26 06:54:40             🧑  作者: Mango

最小生成树 (MST) 是 GATE 的一个重要主题。因此,我们将讨论如何基于 MST 解决不同类型的问题。在理解本文之前,您应该了解 MST 及其算法(Kruskal 算法和 Prim 算法)的基础知识。

类型 1. 基于 MST 的概念性问题 –
MST 有一些重要的特性,在这些特性的基础上,可以提出以下概念性问题:

  • 具有 n 个节点的 MST 中的边数为 (n-1)。
  • 一个图的 MST 的权重总是唯一的。然而,可能有不同的方法来获得这个权重(如果有相同权重的边)。
  • MST 的权重是 MST 中边的权重之和。
  • 对于具有 n 个顶点的 MST,两个顶点之间的最大路径长度为 (n-1)。
  • 在 MST 中,从一个顶点到另一个顶点只存在一条路径。
  • 从 MST 中删除任何边都会断开图的连接。
  • 对于具有不同权重的边的图,MST 是唯一的。

Que – 1.令 G 是一个具有不同边权重的无向连通图。设 emax 为权重最大的边,emin 为权重最小的边。以下哪项陈述是错误的? (GATE CS 2000)
(A) G 的每个最小生成树都必须包含 emin。
(B) 如果 emax 在最小生成树中,那么它的移除必须断开 G
(C) 没有最小生成树包含 emax
(D) G 有唯一的最小生成树

解决方案:由于边权重是唯一的,因此将只有一个边 emin 并将其添加到 MST,因此选项 (A) 始终为真。
由于生成树的边数最少,删除任何边都会断开图。因此,选项(B)也成立。
由于所有边权重都是不同的,G 将有一个唯一的最小生成树。所以,选项(D)是正确的。
选项 C 是错误的,因为如果权重较小的其他边正在创建循环并且添加 emax 之前的边数小于 (n-1),则 emax 可以是 MST 的一部分。

类型 2. 如何找到给定图形的最小生成树的权重 –
这是基于 MST 的最简单的问题类型。要使用 kruskal 算法解决这个问题,

  • 按权重的非递减顺序排列边缘。
  • 如果边不创建循环,则一条一条地添加边,直到我们得到 n-1 条边,其中 n 是图中的节点数。

Que – 2.考虑一个顶点集为 {0, 1, 2, 3, 4} 的完全无向图。下面矩阵 W 中的条目 Wij 是边 {i, j} 的权重。在这个图中,生成树 T 的最小可能权重是多少,使得顶点 0 是树 T 中的叶节点? (GATE CS 2010)
001
(一) 7
(乙) 8
(三) 9
(四) 10

解:在有5个顶点(v1到v5)的图的邻接矩阵中,按非递减顺序排列的边为:

(v1,v2), (v1,v4), (v4,v5), (v3,v5), (v1,v5), 
(v2,v4), (v3,v4), (v1,v3), (v2,v5), (v2,v3) 

正如给定的,顶点 v1 是一个叶节点,它应该只有一条边与它相关。因此,我们最终会考虑它。考虑顶点 v2 到 v5,非降序的边是:

(v4,v5), (v3,v5), (v2,v4), (v3,v4), (v2,v5), (v2,v3)

添加前三个边 (v4,v5)、(v3,v5)、(v2,v4),不会创建循环。此外,我们可以使用 edge (v1,v2) 将 v1 连接到 v2。总权重是这 4 条边的权重之和,即 10。

类型 3。对于给定的图,使用 Kruskal 算法可能有多少最小生成树 –

  • 如果所有边的权重都不同,则最小生成树是唯一的。
  • 如果两条边具有相同的权重,那么我们必须考虑两种可能性并找到可能的最小生成树。

Que – 3.下面加权图的不同最小生成树的数量是 ____ (GATE-CS-2014)
1 (24)
(一) 4
(乙) 5
(三) 6
(四) 7

解决方案:有 5 条边的权重为 1,在 MST 中将它们全部添加不会创建循环。
由于图有 9 个顶点,因此我们总共需要 8 个边,其中添加了 5 个。在剩下的 3 条中,一条边是固定的,用 f 表示。

对于剩余的 2 条边,一条从 c 或 d 或 e 中选择,另一条从 a 或 b 中选择。剩余的黑色将始终创建循环,因此不考虑它们。因此,可能的 MST 为 3*2 = 6。
1 (25)

类型 4. 在给定的序列中,哪一个不是使用 Kruskal 算法添加到 MST 的边序列 –
要解决此类问题,请尝试找出 Kruskal 可以生成的边的序列。不匹配的序列将是答案。

Que – 4.考虑下图:
1 (26)
以下哪一项不是使用 Kruskal 算法添加到最小生成树的边序列? (GATE-CS-2009)
(A) (b,e), (e,f), (a,c), (b,c), (f,g), (c,d)
(B) (b,e), (e,f), (a,c), (f,g), (b,c), (c,d)
(C) (b,e), (a,c), (e,f), (b,c), (f,g), (c,d)
(D) (b,e), (e,f), (b,c), (a,c), (f,g), (c,d)

解决方案: Kruskal 算法将边按权重的非递减顺序相加,因此,我们首先将边按权重的非递减顺序排序为:

(b,e), (e,f), (a,c), (b,c), (f,g), (a,b), (e,g), (c,d), (b,d), (e,d), (d,f).

首先它将在 MST 中添加 (b,e)。然后,它将添加 (e,f) 以及 (a,c)((e,f)后跟(a,c)或反之亦然),因为两者具有相同的权重并且添加它们不会产生循环。
但是,在选项 (D) 中,(b,c) 在添加 (a,c) 之前已添加到 MST。所以不可能是克鲁斯卡尔算法产生的序列。