「网络流浅谈」网络流的概念

news2024/12/26 11:06:15

更好的阅读体验

通常做题思路:问题转化为流网络,再通过最大流 / 最小割 / 费用流与问题之间的数量关系,求解出原问题。

网络流于其他算法不同,概念定理需要熟记于心,否则后面做题会有很大的障碍。

1. 流网络

一个流网络记作 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V 表示点集, E E E 表示边集。对于 ∀ ( u , v ) ∈ E \forall (u,v)\in E (u,v)E,都有一个容量记作 c ( u , v ) c(u,v) c(u,v)。由于是一张流网络,那肯定还应该有汇点与源点,通常记作 s , t s,t s,t

如图,这就是一张流网络。

2. 可行流

对于每一个流网络,满足以下 2 2 2 个条件为可行流:

  1. 容量限制

    ​ 记作: 0 ≤ f ( u , v ) ≤ c ( u , v ) 0\le f(u,v) \le c(u,v) 0f(u,v)c(u,v),即流经每条边的流量不能超过他的限制。

  2. 流量守恒

    ​ 记作: ∑ ( v , x ) ∈ E f ( v , x ) = ∑ ( x , v ) ∈ E f ( x , v ) \sum_{(v,x)\in E}f(v,x)=\sum_{(x,v)\in E}f(x,v) (v,x)Ef(v,x)=(x,v)Ef(x,v),即除了源点与汇点之外,流入点 i i i 的总流量 = = = 流出点 i i i 的总流量。

可行流的流量 ∣ f ∣ |f| f,是指从源点流出的总流量。

即: ∣ f ∣ = ∑ ( s , v ) ∈ E f ( s , v ) − ∑ ( v , s ) ∈ E f ( v , s ) |f|=\sum_{(s,v)\in E}f(s,v)-\sum_{(v,s)\in E}f(v,s) f=(s,v)Ef(s,v)(v,s)Ef(v,s)

3. 残留网络

一般来说,残留网络记作 G f = ( V , E + ! E ) G_f=(V,E+!E) Gf=(V,E+!E),其中 V , E V,E V,E 是源网络的边集和点集, ! E !E !E 表示 E E E 中的所有反向边。

容量:
c ′ ( u , v ) = { c ( u , v ) − f ( u , v ) ( u , v ) ∈ E f ( u , v ) ( u , v ) ∈ ! E c'(u,v)=\begin{cases} & c(u,v)-f(u,v) & (u,v)\in E \\ & f(u,v) & (u,v) \in !E \end{cases} c(u,v)={c(u,v)f(u,v)f(u,v)(u,v)E(u,v)!E

定理

f f f 为原网络的可行流 f ′ f' f 为残留网络的可行流

则有: f + f ′ f+f' f+f 也是 G G G 的一个可行流且 ∣ f + f ′ ∣ = ∣ f ∣ + ∣ f ′ ∣ |f+f'|=|f|+|f'| f+f=f+f

证明:定义 f n = f + f ′ f_{n}=f+f' fn=f+f,则 f n ( u , v ) = f ( u , v ) + f ′ ( u , v ) f_n(u,v)=f(u,v)+f'(u,v) fn(u,v)=f(u,v)+f(u,v)(注意这里只考虑正向边),为了证明也是一个可行流,无非从 2 2 2 方面:容量限制和流量守恒。

容量限制: f ′ ( u , v ) ≤ c ′ ( u , v ) = c ( u , v ) − f ( u , v ) f'(u,v)\le c'(u,v)=c(u,v)-f(u,v) f(u,v)c(u,v)=c(u,v)f(u,v),所以 f ( u , v ) + f ′ ( u , v ) ≤ c ( u , v ) f(u,v)+f'(u,v)\le c(u,v) f(u,v)+f(u,v)c(u,v)

流量守恒:因为 f ( u , v ) f(u,v) f(u,v) 满足流量守恒, f ′ ( u , v ) f'(u,v) f(u,v) 也满足流量守恒,所以 f ( u , v ) + f ′ ( u , v ) f(u,v)+f'(u,v) f(u,v)+f(u,v) 也满足流量守恒(这里只是略证,更多细节大家可以展开观察)。

4. 增广路径

在残留网络沿着容量大于 0 0 0 的边如果能够走到终点,这条路径称为增广路径。(注意:增广路径只是一条路径,而非一个网络)

5. 割
5.1 定义:

将点集 V V V 分成不重叠 S S S T T T, 使得源点在 S S S,汇点在 T T T

5.2 割的容量

c ( S , T ) = ∑ u ∈ S ∑ v ∈ T c ( u , v ) c(S,T)=\sum_{u\in S}\sum_{v\in T} c(u,v) c(S,T)=uSvTc(u,v)

最小割: 最小的割的容量

5.3 割的流量

f ( S , T ) = ∑ u ∈ S ∑ v ∈ T f ( u , v ) − ∑ v ∈ S ∑ u ∈ T f ( u , v ) f(S,T)=\sum_{u\in S}\sum_{v\in T} f(u,v)-\sum_{v\in S}\sum_{u\in T} f(u,v) f(S,T)=uSvTf(u,v)vSuTf(u,v)

性质1: ∀ [ S , T ] , f ( S , T ) ≤ c ( S , T ) \forall [S,T], f(S,T)\le c(S,T) [S,T],f(S,T)c(S,T)

证明: 由于 f ( u , v ) f(u,v) f(u,v) 是大于等于 0 0 0 的,所以 f ( S , T ) ≤ ∑ u ∈ S ∑ v ∈ T f ( u , v ) f(S,T)\le \sum_{u\in S}\sum_{v\in T} f(u,v) f(S,T)uSvTf(u,v),又因为有容量,所以一定 ≤ ∑ u ∈ S ∑ v ∈ T c ( u , v ) \le \sum_{u\in S}\sum_{v\in T} c(u,v) uSvTc(u,v) ,故 ∀ [ S , T ] , f ( S , T ) ≤ c ( S , T ) \forall [S,T], f(S,T)\le c(S,T) [S,T],f(S,T)c(S,T)


性质2: ∀ [ S , T ] , f ( S , T ) = ∣ f ∣ \forall [S,T], f(S,T)= |f| [S,T],f(S,T)=f

证明2:

f ( X , Y ) = ∑ u ∈ X ∑ v ∈ Y f ( u , v ) − ∑ v ∈ X ∑ u ∈ Y f ( u , v ) f(X,Y)=\sum_{u\in X}\sum_{v\in Y} f(u,v)-\sum_{v\in X}\sum_{u\in Y} f(u,v) f(X,Y)=uXvYf(u,v)vXuYf(u,v)

则: f ( X , Y ) = − f ( Y , X ) f(X,Y)=-f(Y,X) f(X,Y)=f(Y,X) f ( X , X ) = 0 f(X,X)=0 f(X,X)=0 f ( Z , X ∪ Y ) = f ( Z , X ) + f ( Z , Y ) , X ∩ Y = ∅ f(Z,X\cup Y)=f(Z,X)+f(Z,Y), X\cap Y= \varnothing f(Z,XY)=f(Z,X)+f(Z,Y),XY=

那么有:
∵ S ∪ T = V , S ∩ T = ∅ , ∴ f ( S , V ) = f ( S , S ) + f ( S , T ) ∴ f ( S , T ) = f ( S , V ) − f ( S , S ) = f ( S , V ) = f ( { s } , V ) + f ( S − { s } , V ) = f ( { s } , V ) = ∣ f ∣ \begin{aligned} &\because S\cup T=V,S\cap T=\varnothing,\\ &\therefore f(S,V)=f(S,S)+f(S,T)\\ &\therefore f(S,T)=f(S,V)-f(S,S)=f(S,V)=f(\{s\},V)+f(S-\{s\},V)=f(\{s\},V)=|f|\\ \end{aligned} ST=V,ST=,f(S,V)=f(S,S)+f(S,T)f(S,T)=f(S,V)f(S,S)=f(S,V)=f({s},V)+f(S{s},V)=f({s},V)=f


那么 ∣ f ∣ = f ( S , T ) ≤ c ( S , T ) |f|=f(S,T)\le c(S,T) f=f(S,T)c(S,T)

即, ∣ f ∣ ≤ c ( S , T ) |f|\le c(S,T) fc(S,T);故,最大流 ≤ \le 最小割

7. 最大流最小割定理

(1)可行流 f f f 是最大流

(2) G f G_f Gf 中不存在增广路

(3) ∣ f ∣ = c ( S , T ) |f|=c(S,T) f=c(S,T)

在三个条件中,仅需知道 1 1 1 个,就能够推出另外 2 2 2 个,证明略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1688539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发ArkUI-X基础知识:【ArkUI代码工程及构建介绍】

代码工程及构建介绍 背景 ArkUI作为OpenHarmony的默认开发框架,在本项目(ArkUI-X)中需要做到一套代码同时支持多平台构建,所以会采取共仓开发的方式,部分仓直接指向OpenHarmony相关开源仓。 代码结构及仓库结构 代…

css左右滚动互不影响

想实现左右都可以滚动,且互不影响。 只需要再左边的css里面 .threedlist {cursor: pointer;width: 280px;position: fixed;height: 100vh; /* 定义父容器高度 */overflow-y: auto; /* 只有在内容超过父容器高度时才出现滚动条 */} 如果想取消滚动条样式 .threedli…

windows docker desktop 更换镜像存储目录

windows docker desktop 更换镜像存储目录 方法:如图,Browse浏览一个新的目录并选中,确定后,程序会开始stop,在stop完成前,会持续迁移原有镜像到新的位置,你会发现目标位置的磁盘占用空间越来越…

2024最新 Jenkins + Docker 实战教程(五)- 配置Gitee Webhooks实现自动构建部署

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

Matlab:音频处理

用Matlab绘制一段音频信号在时域上的波形图,然后用低通滤波器滤掉噪音并再次绘制 1、导入音频文件 filename X:\1.mp3; % 替换为你的音频文件路径 [x, Fs] audioread(filename); 2、获取音频信号长度 len length(x); 3、计算时间轴 t (0:len-1) / Fs; 4、…

轻量音乐网站程序源码,在线音乐免费听歌

这是一个高品质的音乐共享和流媒体平台,用户可以在这个网站上免费在线听歌。这个轻量级的音乐网站程序源码,是您创建自己的音乐流媒体网站的最佳选择!它还支持制作插件,并且在更新后,您可以保留您的自定义设置。 下 载…

ASP+ACCESS基于WEB车辆管理系统

3.1 系统需求分析 该过程是个不断认识不断细化的过程。这里所要完成的工作是深入描述软件的功能和性能,确定软件的设计限制和软件同其他系统元素的接口细节,从而奠定软件的开发基础。 性能需求:该系统中,管理员模块只有管理人员…

重学java 40.多线程 — 死锁和线程状态

—— 24.5. 一、死锁 1.死锁介绍(锁嵌套就有可能产生死锁) 指的是两个或者两个以上的线程在执行的过程中由于竞争同步锁而产生的一种阻塞现象;如果没有外力的作用,他们将无法继续执行下去,这种情况称之为死锁 例: 两线程处于互相等待的状态&a…

SQL刷题笔记day2

1 题目 我的通过代码: select salary from salaries group by salary order by salary desc 复盘:考点是只显示一次——group by,逆序(从大到小)——order by...desc 2题目 我的错误代码: select empl…

【stm32/CubeMX、HAL库】嵌入式实验六:定时器(3)|外部脉冲计数

参考: 【【正点原子】手把手教你学STM32CubeIDE开发】 https://www.bilibili.com/video/BV1Wp42127Cx/?p13&share_sourcecopy_web&vd_source9332b8fc5ea8d349a54c3989f6189fd3 《嵌入式系统基础与实践》刘黎明等编著,第九章定时器&#xff0c…

若依微服务整合knife4j

在Spring Cloud的微服务架构下&#xff0c;每个微服务并不需要引入前端的ui资源&#xff0c;因此在每个微服务的Spring Boot项目下&#xff0c;引入ruoyi-common-swagger提供的starter即可。 1、在ruoyi-gateway网关模块下&#xff0c;把knife4j依赖资源引入 <!-- knife4j…

数据结构之时间复杂度和空间复杂度的相关计算

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 时间复杂度 概念 大O的渐进表示法 相关练习 例1&#xff1a; 例2&#xff1a; 例3&am…

Redis篇 Redis的基本命令和Keys命令

get,set命令和Keys命令 一. get,set命令二. keys命令1.?2. *3. [^]4.[] 一. get,set命令 在博主给大家说明这两个最核心的命令之前,还需要大家知道, Redis的客户端和服务器交互,需要非常非常多的命令 但是大家需要全记住吗? 大家只需要记住基本命令.并且会查询其他命令即可. …

http项目改为/支持https的方案、无需修改后台代码

背景描述&#xff1a;原来的项目前后台都是http&#xff0c;现在某个服务要求前台必须使用https&#xff1b; 方案1&#xff1a;前台部署在https里&#xff0c;后面代码修改&#xff1b;但是微服务架构&#xff0c;后台工作量太大&#xff1b; 方案2&#xff1a;前台部署在ht…

PySODEvalToolkit 使用笔记

1. 克隆仓库 首先&#xff0c;克隆PySODEvalToolkit仓库到你的本地机器&#xff1a; git clone https://github.com/lartpang/PySODEvalToolkit.git2. 创建虚拟环境 cd PySODEvalToolkit conda create -n pysodeval python3.73. 安装依赖 pip install -r requirements.txt4…

文心一言 VS 讯飞星火 VS chatgpt (266)-- 算法导论20.2 1题

一、写出 PROTO-vEB-MAXIMUM 和 PROTO-vEB-PREDECESSOR 过程的伪代码。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 首先&#xff0c;让我们明确一下 PROTO-vEB-MAXIMUM 和 PROTO-vEB-PREDECESSOR 这两个过程是在介绍van Emde Boas树&#xff08;简称vEB树&a…

Vue - JavaScript基础学习

一、语言概述 JavaScript 中的类型应该包括这些&#xff1a; 1.数字&#xff08;默认双精度区别于Java&#xff09; console.log(3 / 2); // 1.5,not 1 console.log(Math.floor(3 / 2)); // 10.1 0.2 0.30000000000000004NaN&#xff08;Not a Number&#x…

深入用户内心:设计师如何通过可用性测试洞察用户需求

可用性测试是指让用户体验产品的原型或成品。设计师通过观察和分析用户的使用行为和感受&#xff0c;进一步合理地改进产品的设计方法。你可能会想知道我们可以用什么方法来测试可用性&#xff1f;随着互联网行业的快速迭代更新&#xff0c;可用性测试衍生出了许多类型和方法。…

Packet Tracer-HSRP+DHCPv4+VLAN间路由+以太通道综合实验

实验拓扑&#xff1a; 实验内容&#xff1a; VLAN及VLAN间路由的配置&#xff0c;以太通道的配置&#xff0c;STP的根调整&#xff0c;DHCPv4的配置&#xff0c;首跳冗余HSRP的配置。 实验最终结果&#xff1a; PC可以自动获取到DHCP-Server分配的IP地址&#xff0c;实现首跳…

【人工智能】模型性能评估

模型性能衡量介绍 混淆矩阵 混淆矩阵(Confusion Matrix&#xff09; TP(真阳性)&#xff1a;预测为阳性&#xff0c;且预测正确。 TN(真阴性)&#xff1a;预测为阴性&#xff0c;且预测正确。 FP(伪阳性)&#xff1a;预测为阳性&#xff0c;但预测错误&#xff0c;又称型一误…