1、网络与网络流一、网络流的基本概念先来看一个实例。现在 想将一些物资从 S运抵 T,必须经过一些中转站。连接中转站的是公路,每条公路都有最大运载量。S、 T和中转站作为点,每条公路作为弧作有向图,每条弧上赋予该公路的最大运载量。最多能将多少货物从 S运抵 T?丝贩接彤救熙拾语正绿缚兔胳东诺篮魔靠具难血延准以慧霜酱懊琼币拒拳图论最大流问题图论最大流问题定义 1 若有向图满足下列条件: (1)有且仅有一个入度为零的顶点 s,称为源点;(2) 有且仅有一个出度为零的顶点 t,称为汇点 ;(3) 每一条弧 (vi, vj)都有一个非负数 cij ,称为该边的容量。如果 vi,vj之间没有边, cij =
2、0。则称之为网络,记为 N = (V, E, C).图 1所给出的一个赋权有向图 N就是一个网络,指定 v1是源点, v4为汇点,弧旁的数字为 cij。瓷莹夕刘扶闻兹睡葫鸣雹债爷忽兜跳军埠酉符援彤蹈额盆抄蛙砖逆观醒望图论最大流问题图论最大流问题图 1 图 2网络流:是定义在弧集合 E上一个函数 f=f(vi,vj),并称 f(vi,vj)为弧 (vi,vj)上的流量 (简记为 fij)。如图 2所示的网络 N,弧上两个数,第一个数表示容量 cij,第二个数表示流量 fij。 矫寨骋迢与印鄂沃榷男钓桥答窗赚脯鹤彭蛤泅禽沿撅傅献堵跳救险倍烙早图论最大流问题图论最大流问题二、可行流与最大流1. 定义
3、在实际问题中,对于流有两个显然的要求:一是每个弧上的流量不能超过该弧的最大通过能力 (即弧的容量 );二是中间点的流量为 0,源点的净流出 量和汇点的净流入量必相等。因此有定义如下。拔孔现煤蛮泉鲁眶遮仰木战并驮绳荡匿男约毋等善泅悠喇氰镶肉弄蔫养商图论最大流问题图论最大流问题定义 2 网络 N中每条边都给定一个非负实数 fij满足下列条件(1)容量约束: 0fijcij, (vi,vj) E,(2)守恒条件对于中间点:流入量 =流出量,即对于源点与汇 点:源点的净流出量 =汇点的净流入量,即这一组 fij称为网络 N上的可行流 ,记为 f, w称为流量 . 网络 N中流值最大的流 f*称为 N的
4、最大流 .锨氰属州熏为擞坍悼次滥理搭猪巍掖习劝辑陀氟赃昭阿棵尚挟踩诅署寨绎图论最大流问题图论最大流问题2. 可增广(流)路径可增广路径 ,是指这条路径上的流可以修改,通过修改,使得整个网络的流值增大。定义 3 设 f是一个可行流, P是从源点 s到汇点 t的一条路,若 P满足下列条件:(1)在 P上的所有前向弧 (vi vj)都是非饱和弧,即0fij0,对前向边 eij后向边 eji,图 5, d=1,哲忿列怔纬领绢燕堂辞秧袒鸦坏您孔摆贵卖范错赤农闺正妨踪抄增携逛岭图论最大流问题图论最大流问题图 5, d=1,(5,3) (2,1)(6,2)(4,1) (5,2)s v4tv1v2v3图 5,
5、 d=1,(5,4) (2,2)(6,1)(4,2) (5,3)s v4tv1v2v3序湘躯割肤护庭湾蔽挥违饶弄衷玻捌炕亦幌耕蚊订饯框订存栗辩喝赶综委图论最大流问题图论最大流问题(1,0)(2,0)(1,0)(2,0)(2,0)s tac b第 1条可增路 s,c,b,t,d(1,0)(1,0)(2,2)(1,0)(2,2)(2,2)s tac bd(1,0)d=2第 2条可增路 s,a,b,c,d,t,(1,0)(1,0)(1,1)(2,2)(1,1)(2,1)(2,2)s tac bd(1,1)(1,1)最大流 w=3图 6图 7 图 8吁侍定猎豢闻友毕泰魁怨治宫荔汇肢取甘盔拴收漏递溢夸硝
6、宏管毡弗收鹤图论最大流问题图论最大流问题定理 2 最大流最小割定理:在一个网络 N中,最大流量等于最小割的容量。 证明 设网络的一个可行流 f 为最大流,确定一个割如下:是向前边且 ,则若是后前边且 ,则若则 ,否则存在 s到 t的一条可增路,矛盾。因此, ,则任意 的边 (x,y)有若 是向前边, 是后前边,巨象钾撮考铰畜举恨谜驭扬沃拇梯廓惑臀隐领娶狞麦笑汹息蹭式轩存蝉茬图论最大流问题图论最大流问题由定理 1,又所以 佣谗凋凸羔睁岂旷吞开亚弊股树鱼豌甄吹絮喳佑夏捂旺拼鬃柠酝废算缝拘图论最大流问题图论最大流问题最大网络流 最大流问题实际上是求一可行流 fij,使得 w达到最大。若给了一个可行流
7、 f,只要判断 N中有无关于 f的增广路径,如果有增广路径,改进 f, 得到一个流量增大的新的可行流;如果没有增广路径,则得到最大流。设 是最小割,下面用顶点标号法来定义 S*,在标号过程中,有标号的顶点表示是 S*中的点,没有标号的点表示不是 S*中的点。如 果 t有标号,则说明找到了一条增广路;如果标号过程进行不下去,而 t没有标号,则说明不存在增广路,于是得到了最大流,同时也得到了一个最小割集。 址朱伟仇派附绒形虽踞太俘衍熬复唯芳酪哮菲串博钨以舜巴拎像颤脂甸衫图论最大流问题图论最大流问题求最大流的标号法 (Ford,Fulkerson)从一个可行流 (一般取零流 )开始,不断进行以下的标
8、号过程与增广过程,直到找不到关于 f的可增广路径为止。1. 标号过程 A 标记过程中每个结点给予 3个标号,第一个标号表示该点的先驱点,第二个标号为 “+”或 “-”,表示先驱点与该点连接的边在可增广路中是前向边还是反向边,第三个标号表示这条边上能增加或减少的流值。虱稻够惕劈谱暴垢瓮伞芳上恼蚂支郝逆邻略计母胀创宣豌具弟得密朽絮咸图论最大流问题图论最大流问题stepA1 发点 s标记为 (s, +, ),此时成为已标记,未检查,其余点均称为未标记,未检查。stepA2 任选一已标记未检查的结点 x,若结点 y与 x邻接且未标记,则当(1) 若 (x,y) E且 cxyfxy时,则 y标记为 (x
9、 ,+,dy),其中 dy= mindx, cxy-fxy之后,称 y已标记未检查。(2) 若 (y, x) E且 fyx0时,则 y标记为 (x ,-,dy),其中dy= mindx, fxy之后,称 y已标记未检查。情呜均界蓉孕场被婶救竹览脯边忻忙台渍驰茵骨同膀介盆纫缎湘救糠葬展图论最大流问题图论最大流问题(3) 与结点 x邻接的所有结点都标记完之后,将 x的标记的符号 “+”或 “-”加以标记,表示 x已标记且已检查。StepA3 重复 stepA2,直到收点 t被标记,或者收点不能获得标记为止。如果是前者,转向增广过程,如果是后者,算法结束,所得流即是最大流。绸晓吧浮币吩椿剂喂郸吸拥还
10、罐冠赵猛卑陈惟瀑幂挤权搐幂企矛终嚏吩紊图论最大流问题图论最大流问题2. 增广过程 BstepB1 令 z=tstepB2 若 z的标记为 (q,+,dz),则若 z的标记为 (q,-,dz),则stepB3 若 q=s,则把全部标记去掉, 转向标记过程 A, 否则令 z=q,转到B2.痰步售隙斗您景拷托补特阁千搭蛙琴挛熙敌滑宅悯挡翱盒站岩同撞藤您糜图论最大流问题图论最大流问题例 求图 9所示的最大流。边上的数字表示容量。s t8v1v4v3v275 2961059设 f是任意可行流,从零流开始,设每条边的流均为 0 ,即1. 找一条可增广路并增加其流值A (标记过程 )发点 s标记为 (s,
11、+, )考察与 s邻接的点 v1和 v2。对点 v1,则图 9术皿劳斗跟截淳吻搽品毯嚣蛙赠锈赛生苟坍躁结丑钒班两陪扛雅丛店堑裂图论最大流问题图论最大流问题s t8,0v1v4v3v27,05,0 2,09,06,010,05,09,0于是, v1标记为( s,+,8)同样的方法 v2得到标记( s,+,7)。与 s邻接的点都已标记, s标记中的 “+”写成 ,表示 s已标记,已检查,如图10。图 10(s, , )( s,+,8)( s,+,7)禽厕巩喝盲冒梅豫莎糯导字昨费散英靴侧尔邀桅堆靠慑兽搐籽患商士甄瓮图论最大流问题图论最大流问题(3) 重复 stepA2,选一已标记、未检查的点,如选
12、v1点,与 v1邻接且未标记的点只有 v3。因v3标记为 (v1,+,8)。点 v1已标记、已检查,将其标记中的 “+”写成 ,如图 11。s t8,0v1v4v3v27,05,0 2,09,06,010,05,09,0图 11(s, , )( s, ,8)( s,+,7)则( v1,+,8)低忌范余阶哩滴皋煌隐择凹舞便恍阿会决俺派紊倘炊栋耿蓖雨萍粒巳繁款图论最大流问题图论最大流问题(4) 重复 stepA2,选一已标记、未检查的点,如选 v3点,与 v3邻接且未标记的点有 v4和 t。对于点 v4,因( v4,v3) E 且 fv4v3=0,因此,不能用点 v3去标记点 v4.对于点 t,因
13、s t8,0v1v4v3v27,05,0 2,09,06,010,05,09,0图 12(s, , )( s, ,8)( s,+,7)( v1,+,8)t标记为 (v3,+,5)。如图 12。由于 t已标记,转到增广过程 B. ( v3,+,5)迫鲜唇施丈肝蒂芬球潞略敌掸曼默官濒裔铃铲菌盘屁叼询芽太尽换激燕琼图论最大流问题图论最大流问题B. 增广过程s t8,5v1v4v3v27,05,0 2,09,06,010,05,59,5图 13至此,完成增广过程。如图 13。粉凉拖瞅醒孕稗榨折德祸峪鸟刊愧粹垮基婶沉阐某蛤踪焦吹诺幕托王殆蚂图论最大流问题图论最大流问题2.找一条可增广路并增加其流值图 1
14、4A (标记过程 )(2)考察与 s邻接的点 v1和 v2。对点 v1,s t8,5v1v4v3v27,05,0 2,09,06,010,05,59,5(1) 发点 s标记为 (s, +, )(s, +, )涝暮挪毋如颁饵昨壁曲寝搂嗓枝徊箭蔽定埂帚奋则劝煌巫挟贸砧呈尚糕辽图论最大流问题图论最大流问题s t8,5v1v4v3v27,05,0 2,09,06,010,05,59,5于是, v1标记为( s,+,3)同样的方法 v2得到标记( s,+,7)。与 s邻接的点都已标记, s标记中的 “+”写成 ,表示 s已标记,已检查,如图15。图 15(s, , )( s,+,3)( s,+,7)沥蒜婿刷鼠晰唾挛托尖颈蔑婆阻舅孟赶琳仑署与觅咙蔽桩武垮补篷等泽纱图论最大流问题图论最大流问题