生成树的定义

设连通图G=(V,E),从任一顶点遍历,则图中边分成两部分:E(G) = T(G)+ B(G),T(G)为遍历通过的边,B(G)为遍历时未通过的边,G’(V,T)为G的子图,称之为G的一棵生成树。

生成树分为 深度优先生成树广度优先生成树

数据结构与算法-图的应用

注意:

1. 图的生成树不是唯一的。

2. 生成树G’是图G的极小连通子图。即V(G)=V(G’),G’是连通的,且在G的所有连通子图中边数最少(n个顶点,n-1条 边)。

 

最小生成树

1. 问题的起源

城市架设通讯网,网中n个城市n个顶点,两城市间线路为一条边,每条边都有相应的权重,即架设相应线路的费用。

问题1:n个城市间的通讯网,至少要多少条线路?

答:n个城市间最少的可行的通讯线路就是一棵生成树,至少要n-1条边。

问题2:怎样选择n-1条线路,使总费用最少?

答:合理的取n-1条边,并使边权总和为最少。

2. 最小生成树定义

给定一个带权图,构造带权图的一棵生成树, 使树中所有边的权总和为最小。

3. 最小生成树的构造算法

Prim 算法 和 kruskal 算法

 

最小生成树的构造方法(Prim)

假设G=(V,E)是一个无向带权图,生成的最小生成树为MinT= (V,T),其中V为顶点的集合,T为边的集合。求T的步骤如下:

1. 初始化U={u0},T={ },其中U为一个新设置的顶点的集合,初始U中只含有顶点u0,这里假设在构造最小生成树时,从顶点u0 出发;

2. 对所有点u属于U集合,点v属于(V-U)集合,两点所构成的边(u,v)中,找一条权最小的边(u’,v’),将这条边加入到集合T中,将顶点v’加入到 集合U中

3. 如果U=V,则算法结束,否则重复以上步骤。最后得到最小生成树 MinT=<V,T>,其中T为最小生成树的边的集合。

数据结构与算法-图的应用

未完待续。。。

 

 

 

 

 

 

 

 

 

 

相关文章:

  • 2021-03-31
  • 2021-11-07
  • 2021-09-23
  • 2021-10-31
  • 2020-10-20
  • 2022-12-23
  • 2021-09-09
  • 2021-11-28
猜你喜欢
  • 2021-05-20
  • 2021-05-23
  • 2021-12-12
  • 2021-12-15
  • 2021-05-26
  • 2021-10-02
  • 2021-12-21
相关资源
相似解决方案