在图论的数学领域中,如果连通图G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树(SpanningTree)。生成树是连通图的包含图中的所有顶点的极小连通子图。图的生成树不惟一。从不同的顶点出发进行遍历,可以得到不同的生成树。

常用的生成树算法有DFS生成树、BFS生成树、PRIM 最小生成树和Kruskal最小生成树算法。

中文名

生成树算法

外文名

Spanning tree algorithm

归属学科

图论包    括

DFS、BFS、最小生成树

图的生成树

不惟一

应    用

自动控制

生成树算法自由树

编辑

语音

自由树就是一个无回路的连通图(没有确定根)(在自由树中选定一顶点做根,则成为一棵通常的树)。从根开始,为每个顶点(在树中通常称作结点)的孩子规定从左到右的次序,则它就成为一棵有序树。在图的应用中,我们常常需要求给定图的一个子图,使该子图是一棵树。

生成树算法生成树

编辑

语音

在图论中,如果连通图 的一个子图是一棵包含的所有顶点的树,则该子图称为G的生成树(SpanningTree)。

生成树是连通图的包含图中的所有顶点的极小连通子图。

图的生成树不惟一。从不同的顶点出发进行遍历,可以得到不同的生成树。

通用定义:

若从图的某顶点出发,可以系统地访问到图中所有顶点,则遍历时经过的边和图的所有顶点所构成的子图,称作该图的生成树。

(1)若G是强连通的有向图,则从其中任一顶点v出发,都可以访问遍G中的所有顶点,从而得到以v为根的生成树。

(2)若G是有根的有向图,设根为v,则从根v出发可以完成对G的遍历,得到G的以v为根的生成树。

(3)若G是非连通的无向图,则要若干次从外部调用DFS(或BFS)算法,才能完成对G的遍历。每一次外部调用,只能访问到G的一个连通分量的顶点集,这些顶点和遍历时所经过的边构成了该连通分量的一棵DFS(或BPS)生成树。G的各个连通分量的DFS(或BFS)生成树组成了G的DFS(或BFS)生成森林。

(4)若G是非强连通的有向图,且源点又不是有向图的根,则遍历时一般也只能得到该有向图的生成森林。

生成树算法分类

编辑

语音

1)生成树的求解方法

设图是一个具有n个顶点的连通图。则从G的任一顶点(源点)出发,作一次深度优先搜索(广度优先搜索),搜索到的n个顶点和搜索过程中从一个已访问过的顶点搜索到一个未曾访问过的邻接点,所经过的边(共n-1条)组成的极小连通子图就是生成树。(源点是生成树的根)

通常,由深度优先搜索得到的生成树称为深度优先生成树,简称为DFS生成树;由广度优先搜索得到的生成树称为广度优先生成树,简称为BFS生成树。

注意:

①图的广度优先生成树的树高不会超过该图其它生成树的高度

②图的生成树不惟一,从不同的顶点出发进行遍历,可以得到不同的生成树。

生成树算法最小生成树

编辑

语音

对于连通的带权图(连通网)G,其生成树也是带权的。生成树T各边的权值总和称为该树的权,记作:

其中,TE表示T的边集,w(u,v)表示边(u,v)的权。权最小的生成树称为G的最小生成树(Minimum SpannirngTree)。最小生成树可简记为MST。[1]

普里姆(PRIM)算法

算法简单描述

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

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

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

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

b. 将v加入集合Vnew中,将边加入集合Enew中;

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

伪代码描述PrimMST(G,T,r)

{

//求图G的以r为根的MST,结果放在T=(U,TE)中

InitCandidateSet(…);//初始化:设置初始的轻边候选集,并置T=({r},¢)

for(k=0;k

{

//求T的n-1条树边

(u,v)=SelectLiShtEdge(…);//选取轻边(u,v);

T←T∪{(u,v)

};

//扩充T,即(u,v)涂红加入TE,蓝点v并人红点集U

ModifyCandidateSet(…);

//根据新红点v调整候选轻边集

}

}

用普里姆算法构造最小生成树的过程

克鲁斯卡尔(Kruskal) 算法

Kruskal算法是基于贪心的思想得到的。首先我们把所有的边按照权值先从小到大排列,接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合为止。至于怎么合并到一个集合,那么这里我们就可以用到一个工具——-并查集。换而言之,Kruskal算法就是基于并查集的贪心算法。

算法流程:

输入:图G

输出:图G的最小生成树

具体流程:

1)将图G看做一个森林,每个顶点为一棵独立的树

2)将所有的边加入集合S,即一开始S=E

3)从S中拿出一条最短的边(u,v),如果(u,v)不在同一棵树内,则连接u,v合并这两棵树,同时将(u,v)加入生成树的边集E'

4)重复(3)直到所有点属于同一棵树,边集E'就是一棵最小生成树

时间复杂度:

Kruskal算法每次要从都要从剩余的边中选取一个最小的边。通常我们要先对边按权值从小到大排序,这一步的时间复杂度为为O(|Elog|E|)。Kruskal算法的实现通常使用并查集,来快速判断两个顶点是否属于同一个集合。最坏的情况可能要枚举完所有的边,此时要循环|E|次,所以这一步的时间复杂度为O(|E|α(V)),其中α为Ackermann函数,其增长非常慢,我们可以视为常数。所以Kruskal算法的时间复杂度为O(|Elog|E|)。

Kruskal算法构造最小生成树的过程

生成树算法应用

编辑

语音

网络G表示n各城市之间的通信线路网线路(其中顶点表示城市,边表示两个城市之间的通信线路,边上的权值表示线路的长度或造价。可通过求该网络的最小生成树达到求解通信线路或总代价最小的最佳方案。参考资料

1.

Gower J C, Ross G J S. Minimum Spanning Trees and Single Linkage Cluster Analysis[J]. Journal of the Royal Statistical Society, 1969, 18(1):54-64.

2.

江波, 张黎, JIANGBo,等. 基于Prim算法的最小生成树优化研究[J]. 计算机工程与设计, 2009, 30(13):3244-3247.

计算机网络生成树算法,生成树算法相关推荐

  1. 计算机网络中 碰撞检测,虚拟现实中碰撞检测算法研究

    摘要: 碰撞检测主要用于判定虚拟环境中两个(或多个)物体是否相交,是虚拟现实.虚拟制造.机器人运动规划.计算机图形学.物理仿真.三维游戏等相关领域要解决的主要关键问题之一.随着计算机技术及计算机网络的 ...

  2. 【计算机网络】网络层 : 路由算法 ( 路由算法分类 | 静态路由算法 | 动态路由算法 | 全局性动态路由算法 | 分散性动态路由算法 | 分层次路由选择协议 )

    文章目录 一.路由算法 二.路由算法 分类 三.静态路由算法 四.动态路由算法 五.动态路由算法 分类 六.分层次的路由选择协议 一.路由算法 路由算法 : 选择数传输的 "最佳路由&quo ...

  3. C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)

    1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...

  4. 数据挖掘十大经典算法之——AdaBoost 算法

    数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...

  5. 最短路径之迪杰斯特拉(Dijkstra 算法)弗洛伊德算法(C语言完整代码实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  6. 67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优

    67.Java垃圾收集机制 67.1.对象引用 67.2.垃圾对象的判定 67.3.垃圾收集算法 67.3.1.标记-清除算法 67.3.2.标记-整理算法 67.3.3.分代收集 67.4.垃圾收集 ...

  7. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  8. 【算法】prim算法(最小生成树)(与Dijkstra算法的比较)

    最小生成树: 生成树的定义:给定一个无向图,如果它的某个子图中任意两个顶点都互相连通并且是一棵树,那么这棵树就叫做生成树.(Spanning Tree) 最小生成树的定义:在生成树的基础上,如果边上有 ...

  9. 初学者如何选择合适的机器学习算法(附算法速查表)

    来源:机器之心 参与:黄小天.蒋思源.吴攀 校对:谭佳瑶 本文长度为4000字,建议阅读6分钟 本文针对算法的选择为你提供一些参考意见. 本文主要的目标读者是机器学习爱好者或数据科学的初学者,以及对学 ...

最新文章

  1. 通俗讲解集成学习算法!
  2. SSL ×××的强劲发展势头似乎表明,它将取代IPSec ×××
  3. C++基础--简单Socket通信实例
  4. ZOJ Problem Set - 1730 Crazy Tea Party
  5. [CQOI]九连环(FFT优化+高精)
  6. 使用 Web Tracing Framework 分析富 JS 应用的性能
  7. 【系列7】使用Dockerfile创建带mysql的Centos Docker镜像
  8. oracle 函数 abs,Oracle 函数(八)
  9. Spark in action on Kubernetes - 存储篇(一)
  10. python-excel写入代码1
  11. Invisible Perturbations: Physical Adversarial Examples Exploiting the Rolling Shutter Effect 论文解读
  12. RocketMQ 常见异常处理
  13. 机器视觉核心之工业相机
  14. PCB设计指南:安规、布局布线、EMC、热设计、工艺
  15. Angular 个人深究(一)【Angular中的Typescript 装饰器】
  16. 达人评测 r7 7840HS和i5 1340p选哪个 锐龙r77840HS和酷睿i51340p对比
  17. 再见!Notepad++
  18. 浅谈Warshall算法
  19. 查看当前Ubuntu系统的版本
  20. 两类边界条件的OBVP求解方法

热门文章

  1. 基于ESB的企业服务集成平台建设之道
  2. Chrome浏览器中的网上应用店如何加载
  3. Gpon与Epon的区别
  4. 【场景化解决方案】钉钉财务审批同步金蝶云星空
  5. 深入探索 Kdump,第 3 部分
  6. 视频直播CDN加速性能测试
  7. 关于数字反转题的思考
  8. opengl 入门学习
  9. Sumo 搭建交叉路口交通流仿真平台
  10. ipad怎么和mac分屏_iPadOS分屏怎么设置 苹果平板五五多任务分屏使用方法