数据结构最小生成树讨论课报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构最小生成树讨论课报告.doc

《数据结构》讨论课 报告 课程名称: 最小生成树的求解方法及分析 指导老师: 班 级:计算机科学与技术四班 班 级: 计算机科学与技术四班 目录 1?摘要 ?讨论课目的和任务 ?讨论课内容 算法简介 4. 1普里姆算法 4. 2克鲁斯卡尔算法 4. 3其他算法简介 源程序 6 .讨论课结果 7.讨论课中出现的问题及修改情况?-? 8 .讨论课感受及体会 1?摘要 给定一个连通网络,要求构造具有最小代价的生成树时,也即使生成树的各 边的权值总和达到最小。把生成树各边的权值总和定义为生成树的权,那么具有 最小权值的生成树就构成了连通网络的最小生成树。 构造最小生成树的算法有很多种,其中大多数的算法都利用了最小生成树的 一个性质,简称为MST性质:假设G二(V, E)是一个连通网络,U是V中的一个 真子集,若存在顶点u eu和顶点v e(v _U )的边(u, v)是一条具有最小权值 的边,则必存在G的一棵最小生成树包括这条边(u, v)。 利用该性质构造最小生成树的常用算法主要有:Prim(普里姆)算法和 Kruskal (克鲁斯卡尔)算法。 关键词:最小生成树,Prim算法,Kruskal算法 2 ?讨论课目的和任务 已知一个无向连通网表示n个城市以及城市间可能设置的通信网络线路,其 中网的顶点表示城市,边表示两个城市之间的线路,赋于边上的权值表示相应的 代价。对于n个点的连通网能建立许多不同的生成树,每一棵生成树都可以是一 个通信网。我们要选择一棵生成树,使总的耗费最小。 讨论课内容 建立一个图,英存储方式可以采用邻接矩阵形式,需要定义两个数组,一个 存储顶点,一个存储边,存储边的数组表明节点间的连通关系和边的权值。利用 普里姆算法和克鲁斯卡尔算法求网的最小生成树。按顺序输出生成树中各条边以 及权值。 算法简介 1普里姆算法 1. 1简述 从连通网N={V,E}中的某一顶点U0出发,选择与它关联的具有最小权 值的边(UO, v),将其顶点加入到生成树的顶点集合U中。以后每一步,一个 顶点在U中,而另一个顶点不在U中的各条边中选择权值最小的边(u, v), 把它的顶点加入到集合U中。如此继续下去,直到网中的所有顶点都加入 到生成树顶点集合U中为止。 4. 1?2图形解析 4?2.克鲁斯卡尔算法 4. 1.1简述 将图中各个顶点看成是各棵树上的根结点(一棵树),则它是一个含 有n棵树的一个森林。从网的边集E中选取一条权值最小的边,若该条 边的两个顶点分屈不同的树,则将其加入子图,也就是说,将这两个顶点 分别所在的两棵树合成一棵树;反之,若该条边的两个顶点已落在同一棵 树上,则不可取,而应该取下一条权值最小的边再试之。依次类推,直至 森林中只有--棵树,也即子图中含有n-l条边为止。 4. 1?2图形解析 4. 3.其他算法 4. 3. 1. Sollin (Boruvka)算法 Sollin (Brouvka)其实是前面介绍两种算法的综合,每次迭代同时扩 展多课子树,直到得到最小生成树T。 步骤 用定点数组记录每个子树(一开始是单个定点)的最近邻居。(类 似Prim算法) 对于每一条边进行处理(类似Kruskal算法) 如果这条边连成的两个顶点同属于一个集合,则不处理,否则检测这 条边连接的两个子树,如果是连接这两个子树的最小边,则更新(合并)由 于每次循环迭代时,每棵树都会合并成一棵较大的子树,因此每次循环迭 代都会使子树的数量至少减少一半,或者说第i次迭代每个分量大小至少 为。所以,循环迭代的总次数为0(logn)o每次循坏迭代所需要的计算时间: 对于第2步,每次检查所有边0(m),去更新每个连通分量的最小弧;对于 第3步,合并个子树。所以总的复杂度为0(E*logV)。 89 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 T Edge nn[maxE], a[maxE]; void Boruvka(Graph g. Edge mst[]) 算法如下: typedef struct {int v; int w; doubLe wt; } Edge; typeder struct {int V; int E; doubLe **adj } Graph; /*nn存储每个分量的最邻近,a存储尚未删除且还没在MST中 的边h用于访问要检查的下一条边N用于存放下一步所保存的边 每一步都对应着检查剩余的边,连接不同分量的顶点的边被保 留在下一步中最后每一步将每个分量与它最邻近的分量合并, 并将最近邻边添加到MST中 int h, i, j, k, v, w, N; Edge e; int E = GRAPHedges(a, G); fo

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档