最小生成树(MST)是GATE的重要主题。因此,我们将讨论如何基于MST解决不同类型的问题。在理解本文之前,您应该了解MST的基础知识及其算法(Kruskal算法和Prim算法)。
类型1.基于MST的概念性问题–
MST具有一些重要的属性,在这些属性的基础上可以提出以下概念性问题:
- MST中具有n个节点的边数为(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)始终为true。
由于生成树的边数最少,因此删除任何边都将断开图形连接。因此,选项(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}的权重。为了使顶点0为树T中的叶节点,此图中的生成树T的最小可能权重是多少? (GATE CS 2010)
(A)7
(B)8
(C)9
(D)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),不会创建任何循环。同样,我们可以使用边缘(v1,v2)将v1连接到v2。总权重是这4条边的权重之和,即10。
类型3。使用Kruskal算法,对于给定图,可能有多少个最小生成树–
- 如果所有边缘权重都不同,则最小生成树是唯一的。
- 如果两个边缘的权重相同,则我们必须考虑这两种可能性,并找到可能的最小生成树。
Que – 3.下面的加权图的最小最小生成树数是____(GATE-CS-2014)
(A)4
(B)5
(C)6
(D)7
解决方案:有5个权重为1的边,将它们全部添加到MST中不会创建循环。
由于图形有9个顶点,因此我们需要总共8条边,其中5条已经添加。在剩余的3个中,一个边固定为f。
对于剩下的2条边,将从c或d或e中选择一个,而从a或b中选择另一个。剩下的黑色将始终产生循环,因此不予考虑。因此,可能的MST为3 * 2 = 6。
类型4。在给定序列中,不是使用Kruskal算法添加到MST的边的序列–
要解决此类问题,请尝试找出Kruskal可以产生的边的顺序。答案不匹配的顺序将是答案。
Que – 4.考虑下图:
以下哪一项不是使用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)中,在添加(a,c)之前已将(b,c)添加到MST。因此,它不可能是Kruskal算法产生的序列。