最小生成树

来源:互联网 发布:安徽铜陵网络台 编辑:程序博客网 时间:2024/06/07 06:07

一,基本的定义:

在一给定的无向图G=(V,E)中,(u,v)代表连接顶点u与顶点v的边,而w(u,v)代表边的权重,若存在T为E的子集且为无循环图,使得的w(T)最小,则T为G的最小生成树(最小权重树)。

最小生成树可以用Krukal算法或Prime算法求出。

二,算法的描述:

prime算法简述

1)输入:一个加权连通图,其中顶点为v,边集合为E;

2)初始化:Vnew={x},其中x为集合V中的任意一节点,Enew={}为空;

3)重复下列操作,直到Vnew=V;

a再集合E中选取权值最小的边<u,v>,其中u为集合Vnew中的元素,而不是在Vnew集合当中,并且v∈V(如果存在有多条边满足当前描述条件即具有相同权值的边,则可任意选择其中之一);

b,将v加入Vnew中,将<u,v>边加入集合Enew中;

4)输出:使用Vnew和Enew来描述所得到的最小生成树。


Krukal算法简述:

假设WN=(V,{E})是一个含有n个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:先构造一个只含n个顶点,而边集为空的子图,若将该子图中各个顶点看成是个树上的根节点,则他是一个含有n棵树的一个森林。之后,从网的变集E中选取一条权值最小的边,若该条边的两个顶点分属不同的树,则将其加入子图,即将这两个顶点分别所在的两棵树合成一棵树,反之,若该条边的两个顶点已经落在一棵树上,则不可取,而应该取下一条权值最小的边再试,直到森林中中有一棵树,也即子图中含有n-1条边为止。



0 0
原创粉丝点击