在计算机内部除顶点,最小生成树问题的算法实现及复杂度分析—天津大学计算机科学与技术学院(算法设计与分析)...

介绍使用Prim算法构造最小生成树的方法,分析算法的时间和空间复杂度,实现边数较多的无向连通图的最小生成树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《最小生成树问题的算法实现及复杂度分析—天津大学计算机科学与技术学院(算法设计与分析)》由会员分享,可在线阅读,更多相关《最小生成树问题的算法实现及复杂度分析—天津大学计算机科学与技术学院(算法设计与分析)(13页珍藏版)》请在人人文库网上搜索。

1、算法设计与分析课程设计报告学 院 计算机科学与技术 专 业 计算机科学与技术 年 级 2011 姓 名 XXX 学 号 2013年 5 月 19 日题目:最小生成树问题的算法实现及复杂度分析摘要:该程序操作简单,具有一定的应用性。数据结构是计算机科学的算法理论基础和软件设计的技术基础,在计算机领域中有着举足轻重的作用,是计算机学科的核心课程。而最小生成树算法是算法设计与分析中的重要算法,最小生成树也是最短路径算法。最短路径的问题在现实生活中应用非常广泛,如邮递员送信、公路造价等问题。本设计以Visual Studio 2010作为开发平台,C/C+语言作为编程语言,以邻接矩阵作为存储结构,编程。

2、实现了最小生成树算法。构造最小生成树有很多算法,本文主要介绍了图的概念、图的遍历,并分析了PRIM经典算法的算法思想,最后用这种经典算法实现了最小生成树的生成。引言:假设要在n个城市之间建立通信联络网,则连接n个城市只需要n-1条线路。这时,自然会考虑这样一个问题,如何在节省费用的前提下建立这个通信网?自然在每两个城市之间都可以设置一条线路,而这相应的就要付出较高的经济代价。n个城市之间最多可以设置n(n-1)/2条线路,那么如何在这些可能的线路中选择n-1 条使总的代价最小呢?可以用连通网来表示n 个城市以及n个城市之间可能设置的通信线路,其中网的顶点表示城市,边表示两个城市之间的线路,赋予。

3、边的权值表示相应的代价。对于n个顶点的连通网可以建立许多不同的生成树,每一个生成树都可以是一个通信网。现在要选择这样一棵生成树,也就是使总的代价最小。这个问题便是构造连通网的最小代价生成树(简称最小生成树)的问题。最小生成树是指在所有生成树中,边上权值之和最小的生成树,另外最小生成树也可能是多个,他们之间的权值之和相等。一棵生成树的代价就是树上各边的代价之和。而实现这个运算的经典算法就是普利姆算法。正文普里姆(Prim)算法思想普里姆算法则从另一个角度构造连通网的最小生成树。它的基本思想是:首先选取图中任意一个顶点 v 作为生成树的根,之后继续往生成树中添加顶点 w,则在顶点 w 和顶点 v 。

4、之间必须有边,且该边上的权值应在所有和 v 相邻接的边中属最小。在一般情况下,假设图 G=(V,E) 中已落在生成树上的顶点集为U,则尚未落在生成树上的顶点集为 V-U,则从 (V-U) 顶点集中选取加入生成树的顶点 w 应满足下列条件:它和生成树上的顶点之间的边上的权值是在联接这两类顶点的所有边中权值属最小。从 上述生成树的构造过程中回还可以发现一点,即每个顶点都是通过一条边加入到生成树上的,因此对集合 V-U 中的每个顶点,当它和集合 U 中的顶点有一条以上的边相连时,只需要保留一条权值最小的边即可。由此,在普里姆算法中需要附设一个辅助数组 closedge,以记录从集合 U 到集合 V-。

5、U 中每个顶点当前的权值最小边。普里姆算法构造最小生成树的过程普里姆(Prim)算法设计:一:定义模块:1. 头文件、新类型及固定值定义。本程序可接受的最大顶点数为20个,没有连接的点之间,用100表示其权值。#includeusing namespace std;#define MAX_VERTEX_NUM 20/最大顶点数#define QM 100/最大值#define OK 1#define ERROR 0int visitedMAX_VERTEX_NUM;typedef int VertexType;typedef int VRType;2. 首先设计图的存储模块,即定义类型。本程序。

6、采用的图定义是无向图的定义方式,存储模块采用邻接矩阵,便于查找。typedef int VertexType;typedef int VRType;typedef struct ArcCell/邻接矩阵的值int adj;ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef structVertexType vexsMAX_VERTEX_NUM;/顶点向量AdjMatrix arcs;/邻接矩阵int vexnum,arcnum;/图的当前顶点数和弧数MGraph;3. 在实现最小生成树算法时,定义辅助数组,进行判断遍历。typedef s。

7、tructVertexType adjvex;VRType lowcost;closedge MAX_VERTEX_NUM;4. 最后生成最小生成树时,采用辅助数组进行结果的记录。typedef structVertexType head;VRType last;int weight;resultMAX_VERTEX_NUM;二:实现模块(函数)1. 顶点查找函数,因为顶点的值和数组位置的下标不一定相等,所以加入顶点查找函数,返回顶点的值,便于结果显示、区分指针与内容,使思路更为清晰。int LocateVex(MGraph &G,VertexType v)/确定顶点位置int k;for(k。

8、=0;kG.vexnumG.arcnum;for(i=0;iG.vexsi;coutv1v2weight;i=LocateVex(G,v1);j=LocateVex(G,v2);if(iu;MiniSpanTree_PRIM(G,u);system(pause);普里姆(Prim)算法分析:Prim算法的时间复杂度主要是在双重循环构造最小生成树的过程中,设图的顶点数为n,则双重循环的时间复杂度为O(n2),在生成最小生成树的过程中,增加了两个数组,closedge和result数组,用来记录所选顶点的全趋结点,故空间复杂度为O(2n)。普里姆算法的时间复杂度与边数e无关,该算法更适合于求边数较。

9、多的带权无向连通图的最小生成树。普里姆(Prim)算法实验结果:采用的数据:6 111 2 3 4 5 61 2 41 4 31 3 22 5 32 4 42 3 53 4 13 6 24 5 64 6 25 6 41实验结果:图表分析:112244 2 34233544 1 3 2526656 4(a) (b)112 2442231 13125665(c) (d) 114424 242231312 3 25656(e) (f)结论与展望:运用prim算法构造图的最小生成树,使生成树的权值和 达到最小,即耗费最小,这里选择贪心策略,从一个顶点出发,选择到剩余顶点的边权值最小的顶点,将之并入到所。

10、够造的生成树之中,同时修改剩下的顶点到生成 树的权值,再从剩余顶点中继续选择到生成树耗费最小的顶点,继续并入该顶点,直到所有的顶点全部并入到生成树中为止,其核心思想在于不断地在剩余顶点中选 取到生成树耗费最小的顶点,将之并入后,修改剩余顶点到生成树相应的权值,体会到了贪心思想,实验完成较为成功。除此之外,通过本次课程设计巩固了课本的基本知识,熟练运用课程知识。提高我们组织数据及编写程序的能力,使我们能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的问题在计算机内部表示出来并用软件解决问题,本次实验大大提高了我对编程的爱好。但对算法的时间复杂度感到略微的不足,希望将来能加以改进,实现更为简练的最小生成树算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值