资源描述
第七章 图与网络分析
图与网络分析(Graph Theory and Network Analysis),是近几十年来运筹学领域中发展迅速、而且十分灵活的一个分支。由于它对实际问题的描述,具有直观性,故广泛应用与物理学、化学、信息论、控制论、计算机科学、社会科学、以及现代经济管理科学等许多科学领域。
图与网络分析的内容十分丰富。本章只介绍图与网络的基本概念以及图论在路径问题、网络流问题等领域中应用。重点讲明方法的物理概念、基本概念及计算步骤。
§1 图与网络的基本概念
定义1 图是由表示具体事物的点(顶点)的集合V={v1,v2,…,vn}和表示事物之间关系边的集合E={e1,e2,…,em}所组成,且E中元素ei是由V中的无序元素对[vi,vj]表示,即ei=[vi,vj],记为G=(V,E),并称这类图为无向图。
例如,图7-1中,有8条边,6个顶点,即V={v1,v2,…,v6};E={e1,e2,…,e8}其中
e1 = [v1 , v2] = [v2 , v1];
e7 = [v2 , v5] = [v5 , v2];
e2 = [v2 , v3] = [v3 , v2];
e6 = [v4, v5] = [v5 , v4].
定义2
(1)顶点数和边数:图G(V,E)中,V中元素的个数称为图G的顶点数,记作p(G)或简记为p;E中元素的个数称做图G的边数,记为q(G),或简记q。
(2)端点和关联边:若ei=[vi,vj]∈E,则称点vi,vj是边ei的端点,边ei是点vi和vj的关联边。
(3)相邻点和相邻边:同一条边的两个端点称为相邻点,简称邻点;有公共端点的两条边称为相邻边,简称邻边。
(4)多重边与环:具有相同端点的边称为多重边或平行边;两个端点落在一个顶点的边称为环。
(5)多重图和简单图:含有多重边的图称为多重图;无环也无多重边的图称为简单图。
(6)次:以vi为端点的边的条数称为点vi的次,记作d(vi)。
(7)悬挂点和悬挂边:次为1的点称为悬挂点:与悬挂点相联的边称为悬挂边。
(8)孤立点:次为零的点称为孤立点。
(9)奇点与偶点:次为奇数的点称为奇点;次为偶数的点称为偶点。
例如,图7-1中,p(G)=8,q(G)=6;e3=[v4,v3],v4与v3是e3的端点,e3是v4和v3的关联边;v2与v5是邻点,e3与e2是邻边;e7与e8是多重边,e4是一个环;图9.5是一个多重图;v1是悬挂点,e1是悬挂边;v6是孤立点;v2是奇点,v3是偶点。
定理1 图G=(V,E)中,所有点的次之和是边数的两倍。即
。
定理1是显然的,因为在计算各点的次时,每条边都计算两次,于是图G中全部顶点的次之和就是边数的2倍。
定理2 任一图G=(V,E)种,奇点的个数为偶数。
证 设V1,V2分别是G中奇点和偶点的集合,由定理1可知
(7.1)
因为 是偶数,而 也是偶数,故 也必是偶数,由于偶数个奇数才能导致偶数,所以有奇点的个数必须为偶数。
定义3
(1)链在一个图G=(V,E)中,一个由点与边构成的交错序列(vi1,ei1, vi2,ei2,…,vik-1,eik-1,vik)如果满足ei t= [eit, ei t+1] (t=1,2,…,k-1), 则称此序列为一条联结vil, eik,的链,记为μ=(vi1,vi2,…,vik),则称点vi2,vi3,…, vik-1为链的中间点。
(2)闭链与开链:若链μ中vi1=vik 即始点与终点重合,则称此链为闭链(圈)。否则称之为开链。
(3)简单链与初等链:若链μ中,若含的边数均不相同,则称之为简单链;若链μ中,顶点vi1,vi2,…,vik都不相同,则称此链为初等链。除非特别交代,以后我们讨论的均指初等链。
例如,图7-1中,μ1= ( v2,e2, v3,e3, v4,e6, v5) 是一条链,由于链μ1里所含的边和点均不相同,故是一条初等链;而μ2= ( v1,e1, v2,e2, v3,e3, v4,e5,v2,e1,v1) 是一条闭链。
定义4
(1)回路:一条闭的链称为回路。
(2)通路:一条开的初等链称为通路。
(3)简单链回路和初等回路;若回路中的边都不相同,则称为简单回路;若回路中的边和顶点都互不相同,则称为初等回路或圈。
定义5 一个图G的任意两顶点之间,如果至少有一条通路将它们连接起来,则这个图G就称为连通图,否则称为不连通图。
例如,图7-1中,v1与v6没有一条通路把它们连接起来,故此图是不连通图。本章以后讨论的图,除特别声明外,都是指连通图。
定义6
(1)子图:设G1={V1,E1}G2={V2,E2}如果V1 V2,又E1 E2,则称G1为G2的子图。
(2)真子集:若V1 V2,E1 E2即G1中不包含G2中所有的顶点和边,则称G1是G2的真子图。
(3)部分图:若V1=V2,E1 E2,即G1中不包含G2中所有的边,则称G1是G2的一个部分图。
(4)支撑子图:若G1 是G2的部分图,且G1是连通图,则称G1是G2的支撑子图。
(5)生成子图:若G1 是G2的真子图,且G1是不连通图,则称G1是G2的生成子图。
例如,图7-2中,(b)是(a)的真子图,(c) 是(a)的部分图,(d)是(a)上午支撑子图,(e)是(a)的生成子图。
定义7 设G=(V , E)中,对任意一条边e∈E,如果相应都有一个权值w(e),则称G为赋权图。w(e) 称为边e的权。
图7-2是一个赋权图。
e1 = [v1 , v2] , w(e1) = 1 ; e2 = [v1 , v3] , w(e2) = 4 ; e3 = [v2 , v3] , w(e3) = 2
e4 = [v2 , v4] , w(e4) = 3 ; e5 = [v3 , v4] , w(e5) = 1 ; e6 = [v2 , v5] , w(e6) = 5
e7 = [v4 , v5] , w(e7) = 2 ; e8 = [v2 , v5] , w(e8) = 3
可见,赋权图不仅指出各点之间的邻接关系,而且也表示各点之间的数量关系。所以赋权图在图的理论及其应用方面有着重要的地位。
在很多实际问题中,事物之间的联系是带有方向性的。例如图7-4所示。v1表示某一水系的发源地,v6表示这个水系的入海口,图中的箭头则表示各支流的水流方向,图7-4是水系流向图。
可见图7-4中的边是有方向的,称这类图为有向图。
定义8 设V={v1,v2, …,vn}是由n个顶点组成的非空集合,A={a1,a2,…,am}是由m条边组成的集合,且有A中元素ai是V中一个有序元素对(vi,vj),则称V和A构成一个有向图,记作G= (V , A),ai=(vi,vj)表明vi和vj分别为ai边的起点和终点,称有方向的边ai为弧(在图中用带有箭头的线表示)。
例如,图7-4中,(v1,v2),(v1,v3),(v2,v5)都是A中的元素,A是弧的集合。
在有向图的讨论中,类似无向图,可以对多重边、环、简单图、链等概念进行定义,只是在无向图中,链与路、闭链与回路概念是一致的,而在有向图中,这两个概念不能混为一谈。概括地说,一条路必定是一条链。然而在有向图中,一条链未必是一条路,只有在每相邻的两弧的公共结点是其中一条弧的终点,同时又是另一条弧的始点时,这条链才能叫做一条路。
例如,图7-4中,{v1,(v1,v2),v2,(v2,v5),v5,(v5,v6),v6}是一条链,也是一条路。而{v1,(v1,v2),v2,(v2,v5),v5,(v3,v5),v3}是一条链但不是一条路。
我们还会碰到这样一类有向图(见图7-5),这是某地区的交通运输分布、走向及相应费用示意图。箭头表示走向,箭头旁边的数字表示费用,称这类图为赋权有向图。
定义9 设在有向图G= ( V,A )中对任意一条弧aij∈A,如果相应都有一个权值w(aij)则称G为赋权有向图。W(aij)称为弧aij的权。简记为wij(权可以表示距离、费用和时间等)。
在实际工作中,有很多问题的可行解方案都可以通过一个赋权有向图表示,例如:物流渠道的设计、物资运输路线的安排、装卸设备的更新、排水管道的铺设等、所以赋权图被广泛应用于解决工程技术及科学管理等领域的最优化问题。
通常我们称赋权图为网络,赋权有向图为有向网络,赋权无向图为无向网络。本章将在后面几节逐一介绍。
§2 树及最小树问题
树是图论中一个重要概念,由于树的模型简单实用,它在企业管理、线路设计等方面都有很重要的应用。
2.1 树与树的性质
例1 例1 某企业的组织机构如下所示
如果用图表示,见图7-6是一个呈树枝形状的图,“树”的名称由此而来。
图7-6
定义10 一个无回路(圈)的连通无向图称为树。
树的性质
(1)必连通,但无回路(圈);
(2)n个顶点的树必有n-1条边;
(3)树中任意两点间,恰有一条初等链;
(4)树连通,但去掉任意一条边,必变为不连通;
(5)树无回路(圈),但不相邻顶点连一条边,恰得一回路(圈)。
2.2 支撑树与最小树
定义11 设图 是图 的支撑子图,如果是一棵树 ,记 。则称 是 的一棵支撑树。
定理3 图G有支撑树的充分必要条件是图G是连通的。
证 必要性是显然的。
充分性:设G是连通图。
(i)如果G不含圈,由定义10可知,G本身就是一棵树,从而G是它自身的支撑树。
(ii)如果G含圈,任取一圈,从圈中任意去掉一条边,得到图G的一个支撑子图G1。如果G1不含圈,那么G1是G的一棵支撑树(因为易见G1是连通的);如果G1仍含圈,那么从G1中任取一个圈,从圈中再任意去掉一条边,得到图G的一个支撑子图G2,如此重复,最终可以得到G的一个支撑子图Gk,它不含圈,则Gk是图G的一棵支撑树。
由以上充分性的证明中,提供了一个寻求连通图的支撑树的方法。称这种方法为“破圈法”。
例2 在图7-2(a)中,用破圈法求出图的一棵支撑树。
解: 取一圈{v1 e1 v2 e3 v3 e2 v1}去掉e3;取一圈{v1 e1 v2 e4 v4 e5 v3 e2 v1}去掉e5;取一圈{v2 e4 v4 e7 v5 e6 v2}去掉e7;取一圈{v1 e1 v2 e6 v5 e8 v3 e2 v1}去掉e6;
如图7-7所示,此图是图7-2(a)的一个支撑子图,且为一棵树(无圈),所以我们找到一棵支撑树T1={V,E1},其中E1={e1,e4,e2,e8}。
7-2(a)
不难发现,图的支持树不是唯一的,对于上例若这样做:
取一圈{v1 e1 v2 e3 v3 e2 v1}去掉e3;取一圈j{v1 e1 v2 e4 v5 e5 v3 e2 v1}去掉e4;取一圈{v1 e1 v2 e6 v5 e8 v3 e2 v1}去掉e6;取一圈{v4 e7 v5 e8 v3 e5 v4}去掉e8。
如图7-8所示,得到图7-2(a)的另一棵支撑树T2={V,E2},其中,E2={e1,e2,e5,e7}。
求图G的支撑树还有另一种方法“避圈法”,主要步骤是在图中任取一条边e1,找出一条不与e1构成圈的边e2,再找出不与{e1,e2}构成圈的边e3。一般地,设已有{e1,e2,…,ek},找出一条不与{e1,e2,…,ek}构成圈的边ek+1,重复这个过程,直到不能进行下去为止。这是,由所有取出的边所构成的图是图G的一棵支撑树。
定义12 设T=(V,)是赋权图G=(V,E)的一棵支撑树,称中全部边上的权数之和为支撑树T的权,记为w(T)。即
(7.2)
如果支撑树T*的权W(T*)是G的所有支撑树的权中最小者,则称T*是G的最小支撑树,简称最小树。即
(7.3)
式中对G的所有支撑树T取最小。
求最小树通常用以下两种方法。
(1).破圈法:在给定连通图G中,任取一圈,去掉一条最大权边(如果有两条或两条以上的边都是权最大的边,则任意去掉其中一条边),在余图中(是图G的支撑子图)任取一圈,去掉一条最大权边,重复下去,直到余图中无圈为止,即可得到图G的最小树。
例3 用破圈法求解图7-3的最小树。
解: 取一圈{v1 e1 v2 e3 v3 e2 v1}去掉e2;取一圈{v2 e6 v5 e8 v3 e3 v2}去掉e6;取一圈{v2 e4 v4 e5 v3 e3 v2}去掉e8;取一圈{v4 e7 v5 e8 v3 e5 v4}去掉e8。
如图7-9所示,得到一棵支撑树,即为所求最小树T*,w(T*)=1+2+1+2=6。
(2)避圈法(kruskal算法):在连通图G中,任取权值最小的一条边(若有两条或两条以权数相同且最小,则任取一条),在未选边中选一条权值权值最小的边,要求所选边与已选边不构成圈,重复下去,直到不存在与已选边不构成圈的边为止。已选边与顶点构成的图T就是所求最小树。
算法的具体步骤如下:
第1步:令i=1,E0=Φ(空集)。
第2步:选一条边ei∈E\Ei,且ei是使图Gi=(V , Ei-1∪{e})中不含圈的所有边中权最小的边e(e∈E\Ei)。如果这样的边不存在,则T=(V,Ei-1)是最小树。
第3步:把i换成i+1,返回第2步。
例4 用避圈法求图7-3的最小树。
解 在{e1,e2,…,e8}中权值最小的边有e1,e5,从中任取一条e1;在{e2,e3,…,e8}中选取权值最小的边e5;在{e2,e2,…,e8}中权值最小的边有e3,e7,从中任取一条边e3;在{e2,e4,e6,e7,e8}中选取e7;在{e2,e4,e6,e8}中选取e4,e8。但e4与e8都会与已选取边构成圈,故停止。得到与图7-9一样的结果。
结果。
§3 最短路问题
最短路问题是网络分析中的一个基本问题,它不仅可以直接应用于于解决生产实际的许多问题,若管道铺设、线路安排、厂区布局等,而且经常被作为一个基本工具,用于解决其它的优化问题.
定义 13 给定一个赋权有向图D = (V,A),记D中每一条弧 上的权为 。给定D中一个起点 和 终点,设P是D中从 到 的一条路.则定义路P的权是P中所有弧的权之和.记为 ,即
(7.4)
又若P*是D图中 到 的一条路,且满足
(7.5)
式中对D的所有从 到 的路P取最小,则称P*为从 到 的最短路, 为 从 到的最短距离.
在一个图D=(V,A)中,求从 到 的最短路和最短距离的问题就称为最短路问题.
3.1 Dijkstra标号法
下面介绍在一个赋权有向图中寻求最短路的方法,这种方法实际上求出了从给定到任一个顶点的最短路.
如下事实是经常要利用的,即如果P是D中从到的最短路,是P中的一点,那么从沿P到路也是从到的最短路.事实上,如果这个结论不成立,设Q是从到的最短路,令P/是从沿Q到达,再从沿P到达的路,那么P/的权就比P的权小,这与P是从到的最短路矛盾.
Dijkstra算法是没有前公认最好的方法,它适合所有的的情形.
Dijkstra算法是一种标记法,它的基本思路是从起点 出发,逐步向外探寻最短路,执行过程中,给每一个顶点 标号 .其中 是正数,它表示获得此标号的前一点的下标; 或表示从起点 到该点 的最短路的权(称为固定标号,记为P标号)或表示从起点 到该点 的最短路的权的上界(称为临时标号,记为T标号).
方法的每一步是去修改T标号,并且把某一个具有T标号的点改变为具有P标号的点,从而使D中具有标号的顶点数为多一个.这样至多经过p-1步,就可以求出从到及各点的最短路.再根据每一点的第一个数反向追踪找出最短路径.
用P,T分别表示某个顶点的P标号、T标号,表示在第i步已具有P标号点的集合.
Dijkstra算法的具体步骤:
(1)开始时,令 (1)如果 ,算法终止.这时,对每个 ;否则转下一步。
(2) 设 是刚获得P标号的点.考察每个使 修改为即
(7.6)
如果 则把T(vj)修改为 ,把 修改为 ;否则不修改.
(3)令
. (7.7)
如果 ,则把 的T标号变为P标号,即令 ,令 ,k=ji,把i换成i+1,返回(1);否则终止,这时对每一个 有 ;而对每一个 ,有 .
例1 如图7-10所示是某地区交通运输的示意图.试问:从 出发,经哪条路线到达 才能使总行程最短?用Dijkstra算法求解.
解 开始时 , ,令 (j=2,3,…,8),k=1.即给起点 标(0,0),给其余的点表(1, ).这时 为获得P标号的点,其余均为T标号点..
考察与相邻的点(见图7-11):
因,故把的临时标号修改为
,
这时。同理,得
,
.
(见图7-11).其余点的T标号不变.在所有的T标号中,最小的为, 于是令.
i=1:
这时为刚获得P标号的点,考察与相邻的点(见图7-12):
因,故把的临时标号修改为
。
这时,同理得
在所有的T标号中,最小的为,于是令,=3.
i=2:
这时为刚获得P标号的点,考察与相邻的点(见图7-13).
因,故把的临时标号修改为
同理得
.
在所有的T标号中,最小的为()=5,于是令
,=4.
i=3:
这时为刚获得P标号的点.考察与相邻的点(见图7-14).
因为。故把的临时标号修改为
.
这时的临时标号不修改,故=3,同理得
在所有的临时标号中,最小的为,
i=4:
这时为刚获得P标号的点,考察与相邻的点(见图7-15):
因为故把的临时标号修改为
.
这时,同理得
.
在所有的临时标号中,最小的为,于是令,。
i=5:
这时为刚获得P标号的点,考察与相邻的点(见图7-16):
因为,故把的临时标号修改为
。
这时.
这所有的临时标号中,最小的为,于是令,.
i=6:
这时为刚获得P标号的点,考察与相邻的点(见图7-17):
因为.故把的临时标号修改为
.
这时的临时标号不修改,故.
最后只剩下一个临时标号,故令
。
至此已找到从起点到终点的最短距离为12.再根据第一个标号反向追踪求出最短路径为:
事实上,按照这个算法,也找出了起点到各个中间点的最短路径和最短距离.例如
就是从到最短路径,距离为8.
为了简化计算,还可以采用每次只记录从起点到各点的最短距离或上界的方法.为此我们引入记号
表示在第i次标号中各点的距离和上界.例如上例中,我们也可以接如下方式进行:
有“*”号的点表示P标号点.
最后按后面的轨迹记录反向追踪可求得从起点到终点的最短路,且最后一轮标号中所表示的就是从起点到各点的最短距离.
另外,本算法在给某个点标号时,也可以通过找该点的各个来源点的方法来实现,具体作法如下:
开始时,给起点标(0,0),即
一般地,在给起点标号时,要找出所有与有弧相联且箭头指向的各点(称为的来源点),不妨设是的来源点,其标号为
为弧的权值 ,则给点标以(,l()),其中
根据别尔曼优化原理,由始点到的最短路径必是由到某个的最短路径再加上弧(,)的权值。是到最短路径的点,且是的来源点,显然,是到最段路径的长度,所以给每个顶点以标号即可获得最短路径和长度的信息.
下面,以图7-10为例,说明标号法的具体过程.
首先给始点标号,第一个标号表示的是来源点,第二个标号表示.由于是始点,故令始点的第一个标号为0,令,于是得到始点的标号(0,0).
点的来源是,且可由(7.8)计算即
得到的标号(,3).
点的来源点有,计算
,
得到的标号(,4).
的来源点有,计算
于是得到的标号(,5).
的来源有,,但还未标号,而的来源点,,都已经获得标号,故可计算
。
因而得到的标号(,6).计算
故的标号为(,8).
的来源点是, ,计算
,
得到的标号(,7).
最后终点的来源点是,,,计算
,
所以在终点处标上(,12),标号过程结束,见图7-18所示.
我们沿着第一个标号,由终点反向跟踪,很容易求得该网络最短路径,而终点的第二个标号就是此最短路长度.
上述标号过程中,不仅可以求得到的最短路,而且从到(=2,3,4,5,6,7)的最短路都可求得.例如,到的最短路是,最短路长度为8.
归纳上述例子,可以总结标号法一般步骤如下:
(1) (1) 始点 标以(0.0);
(2) (2) 考虑需要标号的顶点 ,设 的来源点 均已获得标号,则 处应标以 ,其中 按(7.8)式确定.
(3) (3) 重复第(2)步,直至终点 也获得标号为止, 就是最短路径的长度.
(4) (4) 确定最短路径,从网络终点的第一个标号反向跟踪,即得到网络的最短路径.
以上例1是非负权(即 )网络最短路径的求解,对于含有负权(即
网络的情形,此标号法也是适用的,请看下面例题.
例 2 求图7-19所示从始点 到各点的最短路径.
解 首先在始点 标以(0,0),然后在处标以( ,-2),由于
所以在和处依次标以(,-5)和(,-7),然后在处标以(,-1).
由于
所以在和处分别标以(,-4)和(,-5)
最后由于
所以在终点处应标以(,3).
所有点都获得标号,标号结果见图7-20,反追踪得到 至 的最短路为 .长度为3.
§4 网络最大流问题
网络最大流问题是网络的另一个基本问题。
许多系统包含了流量问题。例如交通系统有车流量,金融系统有现金流,控制系统有信息流等。许多流问题主要是确定这类系统网络所能承受的最大流量以及如何达到这个最大流量。
4.1 基本概念与定理
1. 1. 网络与流
定义14 (1)网络:
例1 如图7-20是连结某产品产地 和销地 的交通图。弧 表示从 到 的运输线,弧旁的数字表示这条运输线的最大通过能力 ,括号内的数字表示该弧上的实际流 。现要求制定一个运输方案,使从 运到 的产品数量最多。
可行流与最大流
在运输网络的实际问题中,我们可以看出,对于流有两个基本要求:
一是每条弧上的流量必须是非负的且不能超过该弧的最大通过能力(即该弧的容量);
二是起点发出的流的总和(称为流量),必须等于终点接收的流的总和,且各中间点流入的流量之和必须等于从该点流出的流量之和,即流入的流量之和与流出的流量之和的差为零,也就是说各中间点只起转运作用,它既不产出新的物资,也不得截留过境的物资。
因此有下面所谓的可行流的定义。
定义14 对于给定的网络D=(V,A,C)和给定的流 ,若 满足下列条件:
(1) (1) 容量限制条件:对每一条弧 ,有
(7.9)
(2)平衡条件:
对于中间点:
流出量=流入量,即对于每一个i (i≠s,t),有
(7.10)
对于出发带点 ,有
(7.11)
对于收点 ,有
(7.12)
则称 为一个可行流, 称为这个可行流的流量。
注意,我们这里所说的出发点 是指只有从 发出去的弧,而没有指向 的弧;收点 是指只有弧指向 ,而没有从它的发出去的弧。
可行流总是存在的。例如令所有弧上的流 ,就得到一个可行流,(称为零流),其流量 。
如图7-20中,每条弧上括号内的数字给出的就是一个可行流 ,它显然满足定义中的条件(1)和(2)。其流量 。
所谓网络最大流问题就是求一个流 ,使得总流量 达到最大,并且满足定义15中的条件(1)和(2),即
max (7.13)
网络最大流问题是一个特殊的线性规划问题。我们将会看到利用图的特点,解决这个问题的方法较直线性规划的一般方法要简便和直观的多。
例2 写出图7-20所表示的网络最大流问题的线性规划模型。
解 设 ,则其线性规划模型为
max
3. 增广链
在网络D=(V,A,C)中,若给定一个可行流 ,我们把网络中使 的弧称为饱和弧,使 的弧称为非饱和弧。把 的弧称为零流弧,把 的称为非零流弧。
如图7-20中的弧都是非饱和弧,而弧 为零流弧。
若 是网络中联结发点 和收点 的一条链,我定义链的方向是从 到 S ,则链上的弧被分为两:
一类是:弧的方向与链的方向一致,我们称此类和为前向弧,所有前向弧的集合记为 。
另一类是:弧的方向与链的方向一致,我们称此类弧为后向弧,所有后向弧的集合记为 。
如图7-20中,设
是一条从 到 的链,
则
,
定义15 设 是网络D=(V,A,C)上的一个可行流, 是从 到 的一条链,若 满足下列条件:
(1)在弧 (vi,vj)∈μ+上,即 中的每一条弧都是非饱和弧;
(2)在弧 上,即 中的每一条弧都是非零流弧。
则称 是关于 的一条增广链。
如前面所说的链就是一条增广链。因为其中μ+上的弧均非饱和,如(vs,v2) ∈μ+,fs2=5<cs2=13;而μ-上的弧为非零流弧,如(v3,v2) ∈μ-,f32=1>0,。显然这样的增广链不止一条。
4.截集与截量
定义16 给定网络D=(V,A,C),若点集V被分割成两个非空集合V1和V2,使得V=V1+V2,V1∩V2=φ(空集),且vs∈V1,vt∈V2,则把始点在V1,终点在V2的弧的集合称为分离vs和vt的一个截集,记为(V1,V2)。
如图9.26中,设V1={vs,v2,v5},V2={v3,v4,v6,vt}则截集为
,
而弧(v3,v2)和(v4,v5)不是该集中的弧。因为这两条弧的起点在V2中,与定义17不符。
显然,一个网络的截集是很多的(但只有有限个),例如在图7-20中,还可以取 , ,则截集为
另外,若把网络D=(V,A,C)中某截集的弧从网络D中去掉,则从vs到vt便不存在路,所以直观上说,截集是从vs到vt的必经之路。
定义17 在网络D=(V,A,C)中,给定一个截集(V1,V2),则把该截集中所有弧的容量之和,称为这个截集的容量,简称为截量,记为c(V1,V2),即
C(V1,V2)= (7.16)
例如在上面我们所举的两个截集中,有
而
显然,截集不同,其截量也不同。由于截集的个数是有限的,故其中必有一个截集的容量是最小的,称为最小截集,也就是通常所说的“瓶颈”。
不难证明,网络D=(V,A,C)中,任何一个可行流f={fij}的流量V(f),都不会超过任一截集的容量,即
v( f ) ≤ c(V1,V2) (7.17)
如果存在一个可行流f*={f*ij},网络D=(V,A,C)中有一个截集 ,使得
(7.18)
则 必是最大流,而 必是D中的最小截集。
为了求网络最大流f*,我们也说明下面的重要定理。
定理4 在网络D=(V,A,C)中,可行流 是最大流的充要条件是D中不存在关于f*的增广链。
证 先证必要性。用反证法。若f*是最大流,假设D中存在着关于f*的增广链μ,令
(7.19)
由增广链的定义可知θ>0,令
(7.20)
不难验证 是一个可行流,且有
这与f*是最大流的假定矛盾。
再证充分性:即证明设D中不存在关于f*的增广链,f*是最大流。
用下面的方法定义:令
若 ,且有 ,则令 ;
若 ,且有 ,则令 。
因为不存在着关于 的增广链,故
记 ,于是得到一个截集(V*, )。显然有
所以V(f*)=c ,于是f*必是最大流。定理得证。
由上述证明中可见,若 是最大流,则网络必定存在一个截集 ,使得(7.18)式成立。
定理5 (最大流——最小截集定理)对于任意给定的网络D=(V,A,C),从出发点vs到收点vt的最大流的流量必等于分割 和 的最小截集 的容量,即
由定理4可知,若给定一个可行流 ,只要判断网络D有无关于 的增广链。如果有增广链,则可以按定理4前半部分证明中的办法,由公式(7.19)求出调整量Q,再按式(7.20)的方法求出新的可行流。如果流有增广链,则得到最大流。而根据定理4后半部分证明中定义 的办法,可以根据vt是否属于 来判断D中有无关于f的增广链。
在实际计算时,我们是用给顶点标号的方法来定义 的,在标号过程中,有标号的顶点表示是 中的点,没有标号的点表示不是 中的点。一旦有了标号,就表明找到一条从vs到vt的增广链;如果标号过程无法进行下去,而vt尚未标号,则说明不存在从vs到vt的增广链,于是得到最大流。这时将已标号的点(至少有一个点vs)放在集合 中,将未标号点(至少有一个点vt)放在集合 中,就得到一个最小截集 。
4.2 寻求最大流的标号法(Ford , Fulkerson)
从一个可行流出发 (若网络中没有给定 ,则可以设 是零流),经过标号过程与调整过程。
1) 1) 标号过程
在这个过程中,网络中的点或者是标号点(又分为已检查和未检查两种),或者是未标号点,每个标号点的标号包含两部分:第一个标号表明它的标号是从哪一点得到的,以便找出增广链;第二个标号是为确定增广链的调整量θ用的。
标号过程开始,总先给vs标上(0,+∞),这时vs是标号而未检查的点,其余都是未标号点,一般地,取一个标号而未检查的点vi,对一切未标号点vj:
(1) 在弧上 , ,则给vj标号 。这里 。这时点vj成为标号而未检查的点。
(2) 若在弧 上, ,给vj标号 。这里 。这时点vj成为标号而未检查的点。
于是 成为标号而已检查过的点,重复上述步骤,一旦 被标上号,表明得到一条从 到 的增广链 ,转入调整过程。
若所有标号都是已检查过,而标号过程进行不下去时,则算法结束,这时的可行流就是最大流。
2) 2 调整过程
首先按 及其它点的第一个标号,利用“反向追踪”的办法,找出增广链μ。例如设vt的第一个标号为 (或 ),则弧 (或相应地 )是μ上的弧。接下来检查 的第一个标号,若为 (或 ),则找出 (或相应地 )。再检查 的第一个标号,依此下去,直到 为止。这时被找出的弧就构成了增广链 。令调整量θ是 ,即 的第二个标号。
令
去掉所有的标号,对新的可行流 ,重新进入标号过程。
下面,以例题说明此算法求解过程。
例3 用标号法求图7-20所示网络最大流。弧旁的数是
解 :对图7-20中各顶点进行标号。
首先给 标(0,+∞),即
检查 :
在弧 上,因为 ,又有
,所以给 标 ;
在弧上 ,因为 ,又有
,所以给 标 。
检查 :
在弧上 ,因为 ,又有
,所以给 标 ;
在弧上 ,因为 ,又有
,所以给 标 ;
在弧 上,因为 ,又有
,所以给V3标 。
因为前面已给v3标过号 ,这里又给 标 ,它们分别表示两条不同的路线,这里不存在修改标号的问题(与最短路不同)。因为我们的目标是尽快找出一条从vs到vt的增广链,即尽快使终点vt获得标号,所以不必在中途过多停留。也就是说在对已标号点vi进行检查时,每次只检查一个相邻点vj(不论前向弧或后向弧均可),再给标号即可,而不必检查所有与vi相邻的点。事实上,其余的相邻点也不会漏掉,因为以后还要通过检查这些点来找出新的增广链。以下我们就按这种思路进行。
检查:
在弧 上,因为 ,又有
.所以给 标 .
至此,终点 已获得标号,于是找出一条 从到 的增广链。再由标号的第一部分用反向追踪法找出路线,即
(见图7-21)。
进行调查:
这时的调整量 .再按公式(7.20)调整。由于 上各弧均
展开阅读全文