最小生成树模型与实验第六章 最小生成树模型与实验树是图论中的一个重要概念,由于树的模型简单而实用,它在企业管理、线路设计等方面都有很重要的应用。
§6.1树与树的性质上章已讨论了图和树的简单基本性质。
为使更清楚明了,现在使用实例来说明。
例6.1 已知有五个城市,要在它们之间架设电话线,要求任何两个城市都可以互相通话(允许通过其它城市),并且电话线的根数最少。
用五个点54321,,,,v v v v v 代表五个城市,如果在某两个城市之间架设电话线,则在相应的两个点之间联一条边,这样一个电话线网就可以用一个图来表示。
为了任何两个城市都可以通话,这样的图必须是连通的。
其次,若图中有圈的话,从圈上任意去掉一条边,余下的图仍是连通的,这样可以省去一根电话线。
因而,满足要求的电话线网所对应的图必定是不含圈的连通图。
图6.1的表达式满足要求的一个电话线网。
定义6.1 一个无圈的连通图称为树.例6.2 某大学的组织机构如下所示:v 5v 4v 图教务处 研究处校行政办公室 研究生院 财务科行政科 理工学院 人事学院 外语学院……如果用图表示,该工厂的组织机构图就是一个树。
上章给出了一些树的性质,为使能进一步研究这部分知识,先再列出常用一些树和生成树的性质。
树的性质:(1) 树必连通,但无回路(圈);(2) n 个顶点的树必有1-n 条边;(3) 树中任意两点间,恰有一条初等链;(4) 树连通,但去掉任一条边,必变为不连通;(5) 树无回路(圈),但不相邻顶点连一条边,恰得一回路(圈)。
生成树与最小树定义6.2 设图),(11E V G =是图},{E V G =的生成子图,如果1G 是一棵树,记),(1E V T =,则称T 是G 的一棵生成树。
定理6.1 图G 有生成树的充分必要条件是图G 的连通的。
数学物理文科理校教学校长证:必要性是显然的充分性:设G 是连通图。
(i )如果G 不含圈,由定义6.1可知,G 本身就是一棵树,从而G 是它自身的生成树。
(i i )如果G 含圈,任取一圈,从圈中任意去掉一条边,得到图G 的一个生成子图1G ,如果1G 不含圈,那么1G 是G 的一棵生成树(因为易见1G 是连通的);如果1G 仍含少量圈,那么从1G 中任取一个圈,从圈中再任意去掉一条边,得到图G 的一个生成子图2G ,如此重复,最终可以得到G 的一个生成子图k G ,它不含圈,则k G 是图G 的一棵生成树。
§6.2 最小生成树的实例与求解由以上充分性的证明中,提供了一个寻求连通图的生成树的方法,称这种方法为“破圈法”。
例6.4 在图6.1中,用破圈法求出图的一棵生成树解: 取一圈}{1233211v e v e v e v 去掉3e ;取一圈}{123544211v e v e v e v e v 去掉5e ;取一圈}{2657442v e v e v e v 去掉7e ;取一圈}{123856211v e v e v e v e v 去掉6e ;如图6.3所示,此图是图6.2的一个生成子图,且为一棵树(无圈),所以我们找一棵生成树},{11E V T =,其中,},,,{82411e e e e E =。
不难发现,图的生成树不是唯一的,对于上例若这样做:v v 5v3图取一圈}{1233211v e v e v e v 去掉3e ;取一圈}{123554211v e v e v e v e v 去掉4e ;取一圈}{123856211v e v e v e v e v 去掉6e ;取一圈}{4538574v e v e v e v 去掉8e 。
图6.3 图6.4 如图G 的生成树还有另外一种方法“避圈法”,主要步骤是在图中任取一条边1e ,找出一条不与1e 构成圈的边2e ,再找出不与},{21e e 构成圈的边3e 。
一般地,设已有},,,{21k e e e ,找出一条不与},,,{21k e e e 构成圈的边1+k e ,重复这个过程,直到不能进行下去为止。
这时,由所有取出的边所构成的图是图G 的一棵生成树。
定义6.2 设},{E V T =是赋权图},{E V G =的一棵生成树,称E '中全部边上的权数之和为生成树T 的权,记为)(T w 。
即∑∈=T v v ij j i w T w ],[)(。
(7.1)如果生成树*T 的权)(*T W 是G 的所有生成树的权中最小者,则称*T 是G 的最小生成树,简称为最小树。
即)}({min )(*T w T w T= (7.2) 式中对G 的所有生成树T 取最小。
求最小树通常用以下两种方法。
(1)破圈法:在给定连通图G 中,任取一圈,去掉一条最大权边(如果有两条或两条以上的边都是权最大的边,则任意去掉其中一条),在余图中(是图G 的生成子图)任取一圈,去掉一条最大权边,重复下去,直到余图中无圈为止,即可得到图G 的最小树。
例 6.4 用破圈法求图6.5的最小树。
图6.5是一赋权图。
],[211v v e =,1)(1=e w ;],[312v v e =, 4)(2=e w ; ],[323v v e =,2)(3=e w ,],[424v v e =,3)(4=e w ;],[435v v e =, 1)(5=e w ;],[526v v e =,5)(2=e w ,],[547v v e =,2)(7=e w ; ],[528v v e =,3)(8=e w 。
解: 取一圈}{1233211v e v e v e v 去掉2e ;取一圈}{2338562v e v e v e v 去掉6e ;取一圈}{2335442v e v e v e v 去掉8e ;取一圈}{4538574v e v e v e v 去掉8e 。
如图6.6所示,得到一棵生成树,即为所求最小树*T ,62121)(*=+++=T w 。
(2)避圈法(Kruskal 算法):在连通图G 中,任取权值最小的一条边(若有两条或两条以上权相同且最小,则任取一条),在未选边中选一条权值最小的边,要求所选边与已选边不构成圈,重复下去,直到不存在与已选边不构成圈的边为止。
已选边与顶点构成的图T 就是所求最小树。
算法的具体步骤如下:第一步:令1=i ,φ=0E (空集)第二步:选一条边i i E E e \∈,且i e 是使图}){,(1E E V G i i ⋃=-中不含圈的所有边)\(i E E e e ∈中权最小的边。
如果这样的边不存在,由),(1-=i E V T 是最小树。
v v5v 3图第三步:把i 换成1 i ,返回第二步。
例6.5 用避圈法求图6.5的最小树。
解: 在},,,{821e e e 中权值最小的边有51,e e ,从中任取一条1e ;在},,,{832e e e 中选取权值最小的边5e ;在},,,{822e e e 中权值最小边有3e ,7e ,从中任取一条边3e ;在},,,,{87642e e e e e 中选取7e ;在},,,{8642e e e e 中选取84,e e 。
但4e 与8e 都会与已选边构成圈,故停止,得到与图6.6一样的结果。
最小生成树(minimal spanning tree , MST )模型概括为:给定网络中一些点和这些点之间的距离,寻找连接所有这些点的最小总距离。
使用LINGO 软件编制此题的程序如下:MODEL:!Given the number of nodes and the distance betweenthem, finding the shortest total distance of linkson the network to connect all the nodes is theclassic problem called minimal spanning tree (MST);3v 5v v 图6.6SETS:CITY / 1.. 5/: U; ! U( I) = level of city I;! U( 1) = 0;LINK( CITY, CITY):DIST, ! The distance matrix; X; ! X( I, J) = 1 if we use link I, J;ENDSETSDATA: ! Distance matrix need not be symmetric;! However, city 1 is base of the tree;!to: A B C D E;DIST = 0 1 3 4 6 !from A;1 023 5 !from B;3 2 0 1 3 !from C;4 3 1 0 2 !from D;6 5 3 2 0;!from E;ENDDATA! The model size: Warning, may be slow for N >= 8;N = @SIZE( CITY);! Minimize total distance of the links;MIN = @SUM( LINK: DIST * X);! For city K, except the base, ... ; @FOR( CITY( K)| K #GT# 1:! It must be entered;@SUM( CITY( I)| I #NE# K: X( I, K)) = 1;! If there are 2 disjoint tours from 1 city toanother, we can remove a link without breakingconnections. Note: These are not very powerfulfor large problems;@FOR( CITY( J)| J #GT# 1 #AND# J #NE# K:U( J) >= U( K) + X ( K, J) - ( N - 2) * ( 1 - X( K, J)) + ( N - 3) * X( J, K); ););! There must be an arc out of city 1;@SUM( CITY( J)| J #GT# 1: X( 1, J)) >= 1;! Make the X's 0/1;@FOR( LINK: @BIN( X); );! The level of a city except the base is at least1 but no more than N-1, and is 1 if it links to the base;@FOR( CITY( K)| K #GT# 1: @BND( 1, U( K), 999999); U( K) <= N - 1 - ( N - 2) * X( 1, K); ); END使用Solve 求解获得如下结果:得到与图 6.6一样的结果, X(1,2)=1, X(2,3)=1, X(3,4)=1,X(4,5)=1, 其它X(I,J)=0。