新博客的第一篇文章——网络流

本文深入探讨网络流问题,介绍了前置知识,包括有向带权图和网络流概念。接着详细讲解了EK算法、Dinic算法和ISAP算法,包括它们的算法步骤、图解和实现。EK算法基于广度优先搜索,Dinic算法通过分层和深度优先搜索实现,ISAP算法利用标签算法寻找最短增广路。这些算法在解决网络最大流问题中各有优势。
摘要由CSDN通过智能技术生成

旧博客传送门

目录

前置知识

假设存在有向带权图G=(V,E),V={s,v1,v2,v3…,t}

EK算法

1.算法步骤

2.图解

3.算法实现

Dinic 算法

1.算法步骤

2.图解

3.算法实现

ISAP算法

1.算法步骤

2.图解

3.算法实现


前置知识

生活中的电网、水管网、交通运输网都有一个共同点:在网络传输中有方向容量

假设存在有向带权图G=(V,E),V={s,v1,v2,v3…,t}

其中有两个特殊的节点s和t,s叫做源点,t叫作汇点

边的方向表示该边允许通过的最大流量cap(cap≥0),即边的容量

若在该图中有一条边(u,v),则必然不存在反方向的边(v,u),这样的有向带权图就叫做网络

网络流即网络上的流,是定义在网络边集上的一个非负函数flow={flow(u,v)},flow(u,v)是边(u,v)上的流量

满足以下三个性质的网络流叫作可行流

(1)容量约束 任何一条边(u,v)的流量都不可以超过其最大容量,即flow(u,v)≤cap(u,v)

(2)反对称性 假设从u到v的流量是flow(u,v),从v到u的流量是flow(v,u),则满足flow(u,v)=-flow(v,u)

(3)流量守恒 除源点s和汇点t外,所有内部节点的流入量都等于流出量,即

\sum_{(x,u)\epsilon E}flow(x,u)=\sum_{(u,y)\epsilon E}flow(u,y)

例如:若流入节点u的流量之和是10,则从节点u流出的流量之和也是10

源点(s)主要流出流量,但也可能流入流量。例如货物运出后检测到一些不合格产品需要返厂,则对源点来说这些产品就是流入量。

源点的净输出值f=流出量之和-流入量之和,即

f=\sum_{(s,x)\epsilon E}flow(s,x)-\sum_{(y,s)\epsilon E}flow(y,s)

例如:若源点s的流出量之和是10,流入量之和是2,则净输出是8

汇点(t)主要流入流量,但也可能流出流量。例如货物到达仓库后检测出一些不合格产品需要返厂,则对汇点来说这些产品就是流出量。

汇点的净输入值f=流入量之和-流出量之和,即

f=\sum_{(x,t)\epsilon E}flow(x,t)-\sum_{(t,y)\epsilon E}flow(t,y)

注意:任何一个网络可行流flow,其净输出都等于其净输入,满足流量守恒定律

网络最大流指在满足容量约束和流量守恒的前提下,净输出最大的网络流。

1957年,Ford和Fullkerson提出了求解网络最大流的方法,该方法的基本思想是在网络中找增广路,沿增广路增流(增加流量),直到不存在增广路为止

实流网络是只包含实际流量的网络

残余网络G*与网络G的节点相同,G中的每条边都对应G*中的一条边或两条边。在残余网络中,与网络边对应的同向边是可增量(还可以增加多少流量),反向边是实际流量

在残余网络中不显示0流量边

增广路是残余网络上从源点s到汇点t的一条简单路径<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值