最小生成树算法MST【信息技术】.pdfVIP

  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文档。上传文档
查看更多
最小生成树 (MST) 例题:最短网络 [Russ Cox, Winter 1999 USACO Open] 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接 到所有的农场。当然,他需要你的帮助。 约翰已经给他的 场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用 最小的消费,他想铺设最短的光纤去连接所有的农场。 你将得到一份各 场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方 案。 每两个农场间的距离不会超 100000 数学模型: 给出: 一幅连通的有权无向图。 一棵生成树的图是一张无向的连通图(也就是图中任意一对节点都是连通的)。 而一棵最小生成树是一棵权和最小的生成树(即树所有的权值和最小)。 利用 Prim 算法建造最小生成树: 给出: 所有节点和权值的列表。 利用贪心算法建造最小生成树,即在每次都将已有的生成树相连的一个权值最小的节点连入 树中。 从某一个节点开始生成。 确定所有不在树中结点连接到树中所需的最小权值 (如下例中的 distance),并记 录下与之相连的结点 (如下例中的source)。 如果有结点无法连入树中,那么假设 它的权值为无穷大 (比图中所有的权值都大). 在每一步中,找出一个和生成树相连的权值最小的节点(即在distance 栏中)并且 用一条边将它连入树中。 (由于最小生成树的性质,它必定是不含圈的。否则断开这个圈仍然可以保证每个 节点都在树中——译者) 如果你想知道详细的分析或该算法的正确性证明,请参考《Cormen, Leiserson, Rivest》 的第24 章。 伪代码: # distance(j) is distance from tree to node j # source(j) is which node of so-far connected MST # is closest to node j 1 For all nodes i 2 distance(i) = infinity # no connections 3 intree(i) = False # no nodes in tree 4 source(i) = nil 5 treesize = 1 # add node 1 to tree 6 treecost = 0 7 intree(1) = True 8 For all neighbors j of node 1 # update distances 9 distance(j) = weight(1,j) 10 source(j) = 1 11 while (treesize graphsize) 12 find node with minimum distance to tree; call it node i 13 assert (distance(i) != infinity, Graph Is Not Connected) # add edge source(i),i to MST 14 treesize = treesize + 1 15 treecost = treecost + distance(i) 16 intree(i) = True # mark node i as in tree # update distance after node i added 17 for all neighbors j of node i 18 if (distance(j) weight(i,j)) 19 distance(j) = weight(i,j) 20 source(j) = i 2 该算法的 间复杂度为 O(N )。使用堆可以

文档评论(0)

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

1亿VIP精品文档

相关文档