最小生成树

一、定义

  • 连通图:在无向图中,若任意两个顶点vi与vj都有路径相通,则称该无向图为连通图。
  • 强连通图:在有向图中,若任意两个顶点vi与vj都有路径相通,则称该有向图为强连通图。
  • 连通图:在连通图中,若图的边具有一定的意义,每一条变都有对应着一个数,称为权,权代表着连接两个顶点的代价,称这种连通图叫做连通网。
  • 生成树:一个连通图的生成树是指一个连通子图,它含有图中全部n个顶点,但只有足以构成一颗树的n-1条边。一颗有n个顶点的生成树有且仅有n-1条边,如果生成树中再添加一条边,则必定成环。
  • 最小生成树:(代价最小)一个有n个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n个结点,并且有保持图连通的最少的边。

最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。

二、Kruskal算法

此算法可以称为“加边法”,初始最小生成树边数为0,每迭代一次就选择一条满足条件的最小代价边,加入到最小生成树的边集合里。

1.把图中的所有边按代价从小到打排序;

2.把图中的n个顶点看成独立的n棵树组成的森林;

3.按权值从小到大选择边,所选的边连接的两个顶点ui,vi,应属于两颗不同的树,则成为最小生成树的一条边,并将这两颗树合并作为一棵树。

4.重复(3),直到所有顶点都在一棵树内或者有n-1条边为止。

三、Prim算法

此算法可以称为”加点法“,每次迭代选择代价最小的边对应的点,加入到最小生成树中。

算法从某一顶点s开始,逐渐长达覆盖整个连通网的所有顶点。

1.图的所有顶点集合为V;初始令集合u={s},v=Vu;

2.在两个集合u,v能过够组成的边中,选择一条代价最小的边(u0,v0),加入到最小生成树中,并把v0并入到集合u中。

3.重复上述步骤,直到最小生成树有n-1条边或者n个顶点为止。

 

猜你喜欢

转载自www.cnblogs.com/ch122633/p/8972319.html