- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最小生成树的多核并行算法
马成刚
摘要:最小生成树是图论中的经典问题,在现实生活中也有很多应用。本文讨论一种最小生成树的多核并行算法。
关键字:最小生成树;索林算法;并行
一、介绍
最小生成树问题是图论中的一个经典问题,也是众多广泛应用的问题之一。关于最小生成树问题已有一些经典的算法,如:Prim算法、Kruskal算法,都具有近线性的算法复杂度。对于稀疏图来说,使用Kruskal算法更好,否则两种算法复杂性没有什么区别【1】。Prim算法每次选择一个顶点,Kruskal算法每次选择一条边,下一个顶点或边是否选择与以前选的顶点或边有关,这样都不适合于并行计算,即当今的多核计算机不能太大提高计算效率。本文介绍一种基于Sollin算法的求解最小生成树的多核并行算法,能够提高求最小生成树的并行效率。
二、算法
先给出Sollin算法
从连通带权简单图G=(V,E)这样产生最小生成树:相继地添加成组的边。假定对V里的顶点进行了排序,这样就产生了一个顺序,其中若u0先于u1,或者若u0=u1并且v0先于v1,则{u0,v0}先于{u1,v1}。这个算法首先同时选择每个顶点关联的权最小的边。在平局的情形下选择在上述顺序里的第一条边。这样就产生了一个没有简单回路的图,即一些树组成的森林。其次,对森林里的每棵树,同时选择在该树里的一个顶点与在不同的一棵树里顶点之间最短的边。同样在平局的情况下选择在上述顺序下的第一条边。(这样就产生了一个没有简单回路的图,它包含着比在这一步之前出现的更少的边树)继续进行同样的添加树的过程,指导已选择了n-1条边为止。(摘自【1】第576页)
以我对该算法的理解,该算法可以分为三个步骤:选择边、合并顶点、合并边依次循环直到结束。选择边即选择连接每个顶点的权值最小的边,在相同权值的情况下选序号小的;合并顶点将通过选择的边的连通的树中的所有顶点合并成一个新的顶点,进入下一次循环;合并边(在原算法中并没有)用新顶点之间边的权值代替原来树中所有顶点与另一棵树所有顶点之间边的权的最小值,以避免重复查看比较。
我没有见过对Sollin算法的证明,但这是很简单的。这里给出Sollin算法正确性的简单证明。
先证明每个顶点关联的权最小的边至少有一个(对有相同的)最终被选到最小生成树中。用反证法如果一个顶点关联的最小的边不被选到最小生成树中,则在最小生成树中添加这条边一定会出现环,这个顶点有两条边在环上。可以去掉其中一条使其成为树。除非这两条边的权值相同即都为最小的边,否则去掉另一条边(不是最小的边)得到的树比最小生成树的总权值小,违反了最小生成树的定义。
在证明不会有环产生。点合并和边合并明显不会有环产生。如果产生了环,假设v1v2,…, vn构成了环,则是v1选择了边(v1,v2),v2选择了边(v2,v3)… 或反向。由于选择的边都是各个顶点关联的最小权的边,则有w12≥w23≥w34≥…≥w12(wij表示边(vi,vj)的权值),则w12=w23=w34=…=w12。同理,反向也可以得到相同的结论。又由于规定当权值相同时选择序号小的边,如果有环必不符合这条规则。因此可以证明不会出现环。
最后证明算法一定会终止。表示算法终止可以用选了n-1条边,也可以用最后剩下一棵树,易证明两个条件是等价的。在每一次循环,至少是两个顶点结合成一棵树,再把树合并成新顶点,这样顶点数目就减少了一半。循环进行,顶点一定会变为1。(由此可见,该算法的复杂度是线性的)
接下来我们分别就每个步骤讨论一下其并行实现。
选择边
申请数组存放每一个顶点连接到的边的最小值和所对应的边,对所有边进行遍历,找到连接到各个顶点的最小权值和对应的边。我们知道,图的边的存储方式可以是多种多样的,如邻接表,邻接矩阵,再次为方便采用邻接矩阵讨论,此算法也同样适合其他表示方式,而且效率不会相差太大。
对于一个邻接矩阵,可以对每一个顶点并行的求其最小值。按下标从小到大依次遍历,同时可以保证相同权值下标最小。
合并顶点
将通过选择的边的连通的所有顶点合并成一个新的顶点,进入下一次循环。这里用数组实现的链表。对于每一个顶点分配一个int型空间,保存与它相邻的一个顶点的索引。为了便于对联标处理,这里规定,每个顶点保存的顶点的索引必须小于该顶点的索引。接下来将原顶点与新顶点对应,即原顶点保存新顶点的索引。用nn表示新的顶点个数,对链表从小到大遍历,如果不是指向下一个顶点,那么它就是第一个对应新的索引为nn的顶点,新顶点数nn加一。由于已经规定链表中的相邻顶点的索引小于当前顶点的索引,可以直接把链表中相邻顶点对应的新顶点的索引给当前顶点。
合并边
生成新的邻接表权值设为无穷大,遍历当前图的每一条边,如果这条边的两个顶点对应同一个新顶点则跳过。否则判断是否比当前新的
您可能关注的文档
- 无线多通道生理仪.doc
- 日本侵华的历史.ppt
- 日本地震後化学原料工厂停工资料.ppt
- 日本家电的当前结果与未来展望.ppt
- 日本理化学研究所.doc
- 日蚀现象科技馆.ppt
- 旱溪生态探索9月份.ppt
- 昆明准静止锋示意图.ppt
- 春天木业甲醛采购合同.doc
- 春季前热带太平洋地区海洋-大气将基本维持.doc
- 2026中国民生银行广州分行全球校园招聘备考题库及答案详解(各地真题).docx
- 2026中国建设银行青岛市分行校园招聘备考题库有完整答案详解.docx
- 2026中国建设银行总行直属机构校园招聘备考题库含答案详解(名师推荐).docx
- 2026中国民生银行长春分行全球校园招聘备考题库附答案详解(预热题).docx
- 2026中国民生银行成都分行全球校园招聘备考题库含答案详解.docx
- 2026中国建设银行湖南省分行校园招聘610人备考题库附答案详解(研优卷).docx
- 2026中国建设银行建信理财秋季校园招聘9人备考题库(深圳)及答案详解(名校卷).docx
- 2026中国建设银行湖北省分行校园招聘630人备考题库及1套参考答案详解.docx
- 2026中国建设银行深圳市分行校园招聘320备考题库附答案详解(黄金题型).docx
- 2026中国建设银行总部校园招聘120人备考题库附答案详解(综合题).docx
原创力文档


文档评论(0)