📜  离散数学最小生成树

📅  最后修改于: 2020-12-23 01:06:35             🧑  作者: Mango

生成树

如果T是树并且T包括G的所有顶点,则连通图G的子图T称为G的生成树。

最小生成树:

假设G是一个连通权重图,即,为G的每个边分配了一个非负数,称为边的权重,则为G的任何生成树T分配了通过将边的权重与T相加而获得的总权重。

G的最小生成树是总权重尽可能小的树。

克鲁斯卡尔算法找到最小生成树:该算法找到给定连通加权图G的最小生成树T。

  • 输入具有n个顶点的给定连接加权图G,我们希望找到它们的最小生成树T。
  • 根据权重增加,对图形G的所有边进行排序。
  • 用所有顶点初始化T,但要包括边。
  • 将每个图G添加到T中,直到添加n-1个边,才形成循环。

例1:确定如图所示的加权图的最小生成树:

解决方案:使用kruskal算法以递增顺序排列加权图的所有边缘,并使用G的所有六个顶点初始化生成树T。现在开始将G的边缘添加到T中,这不会形成循环,并且权重最小,直到五个因为有六个顶点,所以不添加边。

边缘权重已添加或未添加
(B,E)2已添加
(C,D)3已添加
(A,D)4已添加
[C,F)4已添加
(B,C)5新增
(E,F)5未添加
(A,B)6未添加
(D,E)6未添加
(A,F)7未添加

第1步:

第2步:

第三步:

步骤4:

第五步:

步骤6:丢弃边(A,B),(D,E)和(E,F),因为它们将在图中形成循环。

因此,输出步骤5中的最小生成树形式,总成本为18。

例2:找到图G的所有生成树,然后找到图G中的最小生成树:

解决方案:图G中共有三棵生成树,如图所示:



要查找最小生成树,请使用KRUSKAL算法。最小生成树如图所示:

边缘权重已添加或未添加
(E,F)1已添加
(A,B)2已添加
(C,D)2已添加
(B,C)3新增
(D,E)3已添加
(B,D)6未添加

第一个是最小范围,最小权重= 11。