2023年8月1日发(作者:)
计算机光盘软件与应用 2010年第3期 Computer CD Software and Applications 软件设计开发 基于Prim算法和Kruskal算法的最小生成树优化研究 李仙玉 (肇庆科技职业技术学院信息工程系,广东肇庆摘526020) 要:文章从目前最常见的两种在图最小生成树算法,即Prim和Kruskal算法,展开了阐述和分析,运用了大量的数据 和实例对这两种计算方法进行了分析和研究。通过试验并对Prim算法进行改进,从图中每个顶点的度数入手,采取删除某些无 用边的思想方法,给出了一个寻找最小生成树的算法,使其能动态调整自身的性能,既适合于稠密图,又适合于稀疏图。 关犍词:Prim算法;最小生成树;Kruskal算法 中目分类号:TP312 文献标识码:A 文章编号:1007-9599(2010)03—0095—02 Research Minimum Spanning Tree Based on Prim Algorithm t.i Xianyu (Zhaoqing Institute of Science and Technology Information Technology Engineering,ZhaoQing 526020,China) Abstract:In the minimum spanning tree algorithm of graph,Prim and Ka'uskal algorithm ale respectively app ̄ed to dense graph nd asparse raph.Butg both canllot dynamically regulate heitr own capabi ̄ty based on peak number,edge number and edge distribution.Prim starts from the degree of the vegex and then delete some useless edges from the graph.Therefore, improvement on the Prim algorithm,enabling it dynamically regulates its capability,Can be applied to both dense raph gnd asparse graph. Keywords:Prim algorithm;Minimum spanning tree;ICruskal algorithm 最小生成树是数据结构中图的一种重要应用,它的要求是从一 个带权无向完全图中选择n一1条边并使这个图仍然连通(也即得 到了一棵生成树),同时还要考虑使树的权最小。为了得到最小生 成树,人们设计了很多算法,最著名的有prim算法和kruskal算法。 一然后随便从右边的集合中拿出 个数到左边的集合来,并搜出 它与 他的点所订连线酚值。 从图中可以看到1到3的距离是最短的,所以8一定为最小生 成树中的一段,所以我们将3放入左边的集合,然后把8这个数加 到aiis里面去。并用3到右边的集合中的点的距离去刷新1到右边 、PRIM算法: 与Dijstra算法类似,具体操作是:从图中任意一个顶点开始, 集合的点的距离。 首先把这个顶点包括在MST里,然后在那些其一个端点已在MST里, 另一个端点还不是MST里的边,找权最小的一条边,并把这条边和 其不在MST里的那个端点包括进MST里。如此进行下去,每次往MST 里加一个顶点和一条权最小的边,直到把所有的顶点都包括进MST 里。以上代码中的minVertex函数,可用最小堆等方式实现。任取 一个顶点加入生成树,然后对那些一个端点在生成树中,而另~个 端点不在生成树中的边进行排序,取权值最小的边,将它和另一个 端点加进生成树中。重复步骤直到所有顶点都加进了生成树。 首先我们对于一个样例来分析: 4 O 16 8 9 l6 0 3 6 8 3 0 i0 所以我们第二次就墩3 2的趴高为3,加到ans里面,然后 2拿过来,蹲刷新距离 9 6 1O O 然后afls加6,再把4从右边的集合给拿过来,这是右边集合 空了,PRIM结束。ans=8+3+6=17最小生成数为: 我们有两个集合来操作: (下转第94页) 95一 一计算机光盘软件与应用 多媒体技术及应用 Computer CD Software and Applications 参考文献: 2010年第3期 4.利用数字收发箱和邮件与教师进行交流的学习。 数字收发箱是网络在线学习系统平台的一个功能,学生可以向 教师发送文件。有些因为各种原因课上没有完成实践任务的学生, 可以在课下完成该任务,然后利用数字收发箱或邮件发给教师。 四、结束语 [11纪红,郭公民.多媒体辅助教学现状的分析卟北京农学院学 报,2007,Sl [214秀峰,李晓飞.虚拟学习社区——教师专业发展的新平台if].电化 教育研究,2009,4 作者简介 混合学习模式作为当前一种新型教学模式,融合了传统教学模 式以及计算机网络教学的多重优势,我们应当充分发挥其优势,为 当前高职计算机教学的发展提供强有力的工具。 邹嫒(1973.12一),女,湖南娄底人,湖南娄底职业技术学院,大 学学历,计算机系讲师,主要从事计算机教学研究。 (上接第95页) 选取的边若产生环路则不可能形成一棵生成树。Kruskal算法分e步, 其中e是网络中边的数目。按耗费递增的顺序来考虑这e条边,每次考 虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环 如上图所示,假设E是图中边的集合,V是图中的顶点的集合, TE为最小生成树中的边的集合,则prim算法可以通过以下步骤实现 最小生成树: 路,则将其抛弃,否则,将它选入。 初始时没有任何边被选择。边(1,6)是最先选入的边,它被 (一)首先初始化TE=(0},u={u 0)。此步骤设立一个初始行态 即只有结点u 0的结点集u和一个空的边集TE作为最小生成 加入到欲构建的生成树中,得到图13—12c。下一步选择边(3,4) 并将其加入树中(如图13—1 2d所示)。然后考虑边(2,7,将它 树的,在后面的算法执行过程中,这种行态会不断的发生变化,直到 生成最小生成树,循环终止。 (二)在所有u∈u,v∈V—u的边(u,v)∈E中,搜索一条权 值最小的边(u 0,v 0),同时将(u 0,v 0)边加进到集合TE中, 同时寻找到此边的非u的中顶点,并且将此顶点中加入到u中。此 加入树中并不会产生环路,于是便得到图13 12e。下一步考虑边(2, 3)并将其加入树中(如图13-12f所示)。在其余还未考虑的边中, (7,4)具有最小耗费,因此先考虑它,将它加入正在创建的树中 会产生环路,所以将其丢弃。此后将边(5,4)加入树中,得到的 树如图13—12g所示。下一步考虑边(7,5),由于会产生环路, 将其丢弃。最后考虑边(6,5)并将其加入树中,产生了一棵生成 步骤的功能是在边集E中找一条边,要求这条边满足以下条件:首 先边的两个顶点要分别在顶点集合u和V—u中,其次边的权要最 小。找到这条边以后,把这条边放到边集TE中,并把这条边上不在u 树,其耗费为99。 中的那个顶点加入到u中。这一步骤在算法中应执行多次,每执行 一对于图G=(V,E),开始时,将顶点集分为IV1个等价类,每 个等价类包括一个顶点;然后,以权的大小为顺序处理各条边,如 次,集合TF和u都将发生变化,分别增加一条边和一个顶点,因 此,.rE和u是两个动态的集合,这一点在理解算法时要密切注意。 (三)如果V等于u,算法结束,否则继续重复步骤2。我们可 以把本此判断当做是循环终止的条件。还可以通过算出当u等于v 时,步骤2一共执行了n一1次(其中将图中顶点的数目设为n),TE 中同样也增加了n一1条边,需要求出的最小生成树的边即这n一1 条边。 果某条边连接两个不同等价类的顶点,则这条边被添加到MST,两 个等价类被合并为一个;反复执行此过程,直到只剩下一个等价类。 采用Kruskal算法计算最小支撑树的例子: 连通网用邻接矩阵net表示,若两个顶点之间不存在边,其权值 为计算机内允许最大值,否则为对应边上的权值。 此算法的精妙之处在于对求权值最小的边这一问题的分解(也 正是由于这种分解,而导致了算法理解上的困难)。按照常规的思 路,这一问题应该这样处理:分别从集合u和集合v—u中取一顶点, 并且从邻接矩阵中找到这两个顶点行形成的边的权值。同时设U中 有n个顶点,V—u中有m个顶点。即需要找到m★n个权值,在这 从分析Prim算法中我们得出,如果网中有n个顶点,则将第一个 对数组初始化的频度设为n,第二个将其余顶点并入到集合的u循环语 句的频度为n—l,其中还包括两个内循环:一个是重新修正最小权值 些个权值中,再查找权值最小的边。每执行一次循环,这一查找过程 都应重复一次,计算任务比较繁重。而本算法则利用了变量tree 中第n一1元素到第k+l号元素来存放到上一循环为止的相关比较 结果,如果以第k+1号元素为例说明,其存放的是集合u中某一顶 点到顶点tree.en的边,即这条边是到该点的所有边中权值最小(最 优)的边,所以,求权最小的边这一问题,通过比较第n—l号到第k +1号元素的权值的大小就可以解决,每次循环这需要比较n—k一2 次即可,大大减小了运算量。 二、Kruskal算法 Kruskal算法也称边割法,是Prim于1957年提出的。Kruskal算法 的边,一个是选取最小权值的边频度为n,其频度为n 1。可以看出, Prim算法的时间复杂度为O(n ),与网中的边数无关,因此,该算 法适合求边稠密网的最小生成树。从分析Kruskal算法中我们可以发 现Kruskal算法与Prim算法恰恰相反,它的时间复杂度为0(mlogm), m为网中边的数目。因此,它相对于Prim算法而言,适合于求边稀疏 的网的最小生成树。 参考文献: [1]高一凡《数据结构》算法实现及解析.西安:西安电子科技大学出 版社.2002 每次选择n—l条边,所使用的贪婪准则是:从剩下的边中选择一条不 会产生环路的具有最小耗费的边加入己选择的边的集合中。注意到所 【2】廖荣贵.数据结构与算法北京:清华大学出版社,2004 ・-——94 。——
2023年8月1日发(作者:)
计算机光盘软件与应用 2010年第3期 Computer CD Software and Applications 软件设计开发 基于Prim算法和Kruskal算法的最小生成树优化研究 李仙玉 (肇庆科技职业技术学院信息工程系,广东肇庆摘526020) 要:文章从目前最常见的两种在图最小生成树算法,即Prim和Kruskal算法,展开了阐述和分析,运用了大量的数据 和实例对这两种计算方法进行了分析和研究。通过试验并对Prim算法进行改进,从图中每个顶点的度数入手,采取删除某些无 用边的思想方法,给出了一个寻找最小生成树的算法,使其能动态调整自身的性能,既适合于稠密图,又适合于稀疏图。 关犍词:Prim算法;最小生成树;Kruskal算法 中目分类号:TP312 文献标识码:A 文章编号:1007-9599(2010)03—0095—02 Research Minimum Spanning Tree Based on Prim Algorithm t.i Xianyu (Zhaoqing Institute of Science and Technology Information Technology Engineering,ZhaoQing 526020,China) Abstract:In the minimum spanning tree algorithm of graph,Prim and Ka'uskal algorithm ale respectively app ̄ed to dense graph nd asparse raph.Butg both canllot dynamically regulate heitr own capabi ̄ty based on peak number,edge number and edge distribution.Prim starts from the degree of the vegex and then delete some useless edges from the graph.Therefore, improvement on the Prim algorithm,enabling it dynamically regulates its capability,Can be applied to both dense raph gnd asparse graph. Keywords:Prim algorithm;Minimum spanning tree;ICruskal algorithm 最小生成树是数据结构中图的一种重要应用,它的要求是从一 个带权无向完全图中选择n一1条边并使这个图仍然连通(也即得 到了一棵生成树),同时还要考虑使树的权最小。为了得到最小生 成树,人们设计了很多算法,最著名的有prim算法和kruskal算法。 一然后随便从右边的集合中拿出 个数到左边的集合来,并搜出 它与 他的点所订连线酚值。 从图中可以看到1到3的距离是最短的,所以8一定为最小生 成树中的一段,所以我们将3放入左边的集合,然后把8这个数加 到aiis里面去。并用3到右边的集合中的点的距离去刷新1到右边 、PRIM算法: 与Dijstra算法类似,具体操作是:从图中任意一个顶点开始, 集合的点的距离。 首先把这个顶点包括在MST里,然后在那些其一个端点已在MST里, 另一个端点还不是MST里的边,找权最小的一条边,并把这条边和 其不在MST里的那个端点包括进MST里。如此进行下去,每次往MST 里加一个顶点和一条权最小的边,直到把所有的顶点都包括进MST 里。以上代码中的minVertex函数,可用最小堆等方式实现。任取 一个顶点加入生成树,然后对那些一个端点在生成树中,而另~个 端点不在生成树中的边进行排序,取权值最小的边,将它和另一个 端点加进生成树中。重复步骤直到所有顶点都加进了生成树。 首先我们对于一个样例来分析: 4 O 16 8 9 l6 0 3 6 8 3 0 i0 所以我们第二次就墩3 2的趴高为3,加到ans里面,然后 2拿过来,蹲刷新距离 9 6 1O O 然后afls加6,再把4从右边的集合给拿过来,这是右边集合 空了,PRIM结束。ans=8+3+6=17最小生成数为: 我们有两个集合来操作: (下转第94页) 95一 一计算机光盘软件与应用 多媒体技术及应用 Computer CD Software and Applications 参考文献: 2010年第3期 4.利用数字收发箱和邮件与教师进行交流的学习。 数字收发箱是网络在线学习系统平台的一个功能,学生可以向 教师发送文件。有些因为各种原因课上没有完成实践任务的学生, 可以在课下完成该任务,然后利用数字收发箱或邮件发给教师。 四、结束语 [11纪红,郭公民.多媒体辅助教学现状的分析卟北京农学院学 报,2007,Sl [214秀峰,李晓飞.虚拟学习社区——教师专业发展的新平台if].电化 教育研究,2009,4 作者简介 混合学习模式作为当前一种新型教学模式,融合了传统教学模 式以及计算机网络教学的多重优势,我们应当充分发挥其优势,为 当前高职计算机教学的发展提供强有力的工具。 邹嫒(1973.12一),女,湖南娄底人,湖南娄底职业技术学院,大 学学历,计算机系讲师,主要从事计算机教学研究。 (上接第95页) 选取的边若产生环路则不可能形成一棵生成树。Kruskal算法分e步, 其中e是网络中边的数目。按耗费递增的顺序来考虑这e条边,每次考 虑一条边。当考虑某条边时,若将其加入到已选边的集合中会出现环 如上图所示,假设E是图中边的集合,V是图中的顶点的集合, TE为最小生成树中的边的集合,则prim算法可以通过以下步骤实现 最小生成树: 路,则将其抛弃,否则,将它选入。 初始时没有任何边被选择。边(1,6)是最先选入的边,它被 (一)首先初始化TE=(0},u={u 0)。此步骤设立一个初始行态 即只有结点u 0的结点集u和一个空的边集TE作为最小生成 加入到欲构建的生成树中,得到图13—12c。下一步选择边(3,4) 并将其加入树中(如图13—1 2d所示)。然后考虑边(2,7,将它 树的,在后面的算法执行过程中,这种行态会不断的发生变化,直到 生成最小生成树,循环终止。 (二)在所有u∈u,v∈V—u的边(u,v)∈E中,搜索一条权 值最小的边(u 0,v 0),同时将(u 0,v 0)边加进到集合TE中, 同时寻找到此边的非u的中顶点,并且将此顶点中加入到u中。此 加入树中并不会产生环路,于是便得到图13 12e。下一步考虑边(2, 3)并将其加入树中(如图13-12f所示)。在其余还未考虑的边中, (7,4)具有最小耗费,因此先考虑它,将它加入正在创建的树中 会产生环路,所以将其丢弃。此后将边(5,4)加入树中,得到的 树如图13—12g所示。下一步考虑边(7,5),由于会产生环路, 将其丢弃。最后考虑边(6,5)并将其加入树中,产生了一棵生成 步骤的功能是在边集E中找一条边,要求这条边满足以下条件:首 先边的两个顶点要分别在顶点集合u和V—u中,其次边的权要最 小。找到这条边以后,把这条边放到边集TE中,并把这条边上不在u 树,其耗费为99。 中的那个顶点加入到u中。这一步骤在算法中应执行多次,每执行 一对于图G=(V,E),开始时,将顶点集分为IV1个等价类,每 个等价类包括一个顶点;然后,以权的大小为顺序处理各条边,如 次,集合TF和u都将发生变化,分别增加一条边和一个顶点,因 此,.rE和u是两个动态的集合,这一点在理解算法时要密切注意。 (三)如果V等于u,算法结束,否则继续重复步骤2。我们可 以把本此判断当做是循环终止的条件。还可以通过算出当u等于v 时,步骤2一共执行了n一1次(其中将图中顶点的数目设为n),TE 中同样也增加了n一1条边,需要求出的最小生成树的边即这n一1 条边。 果某条边连接两个不同等价类的顶点,则这条边被添加到MST,两 个等价类被合并为一个;反复执行此过程,直到只剩下一个等价类。 采用Kruskal算法计算最小支撑树的例子: 连通网用邻接矩阵net表示,若两个顶点之间不存在边,其权值 为计算机内允许最大值,否则为对应边上的权值。 此算法的精妙之处在于对求权值最小的边这一问题的分解(也 正是由于这种分解,而导致了算法理解上的困难)。按照常规的思 路,这一问题应该这样处理:分别从集合u和集合v—u中取一顶点, 并且从邻接矩阵中找到这两个顶点行形成的边的权值。同时设U中 有n个顶点,V—u中有m个顶点。即需要找到m★n个权值,在这 从分析Prim算法中我们得出,如果网中有n个顶点,则将第一个 对数组初始化的频度设为n,第二个将其余顶点并入到集合的u循环语 句的频度为n—l,其中还包括两个内循环:一个是重新修正最小权值 些个权值中,再查找权值最小的边。每执行一次循环,这一查找过程 都应重复一次,计算任务比较繁重。而本算法则利用了变量tree 中第n一1元素到第k+l号元素来存放到上一循环为止的相关比较 结果,如果以第k+1号元素为例说明,其存放的是集合u中某一顶 点到顶点tree.en的边,即这条边是到该点的所有边中权值最小(最 优)的边,所以,求权最小的边这一问题,通过比较第n—l号到第k +1号元素的权值的大小就可以解决,每次循环这需要比较n—k一2 次即可,大大减小了运算量。 二、Kruskal算法 Kruskal算法也称边割法,是Prim于1957年提出的。Kruskal算法 的边,一个是选取最小权值的边频度为n,其频度为n 1。可以看出, Prim算法的时间复杂度为O(n ),与网中的边数无关,因此,该算 法适合求边稠密网的最小生成树。从分析Kruskal算法中我们可以发 现Kruskal算法与Prim算法恰恰相反,它的时间复杂度为0(mlogm), m为网中边的数目。因此,它相对于Prim算法而言,适合于求边稀疏 的网的最小生成树。 参考文献: [1]高一凡《数据结构》算法实现及解析.西安:西安电子科技大学出 版社.2002 每次选择n—l条边,所使用的贪婪准则是:从剩下的边中选择一条不 会产生环路的具有最小耗费的边加入己选择的边的集合中。注意到所 【2】廖荣贵.数据结构与算法北京:清华大学出版社,2004 ・-——94 。——
发布评论