【管理运筹学】第 7 章 | 图与网络分析(4,最大流问题)
系列文章目录
【管理运筹学】第 7 章 | 图与网络分析(1,图论背景以及基本概念、术语、矩阵表示)
【管理运筹学】第 7 章 | 图与网络分析(2,最小支撑树问题)
【管理运筹学】第 7 章 | 图与网络分析(3,最短路问题)
【管理运筹学】第 7 章 | 图与网络分析(5,最小费用流问题及最小费用最大流问题)
文章目录
- 系列文章目录
- 引言
- 四、最大流问题
- 4.1 有关概念与定理
- 4.1.1 基本概念
- 4.1.2 有关定理
- 4.2 寻找最大流的标号法
- 写在最后
引言
承接系列文章,这一节主要来学习最大流问题。
生活中,有许多流量问题,例如公路系统的车辆流、控制系统的信息流和金融系统的现金流等等。对于这类包含了流量问题的系统,我们往往要在现有系统容量的约束下,求出系统的最大流。
四、最大流问题
4.1 有关概念与定理
4.1.1 基本概念
定义 1 —— 对于网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) ,在弧集合 A A A 上的一个函数 f = { f ( v i , v j } f=\{f(v_i,v_j\} f={f(vi,vj} 称为网络流, f ( v i , v j ) f(v_i,v_j) f(vi,vj) 为弧 a i j a_{ij} aij 上的流。 c i j c_{ij} cij 为弧 a i j a_{ij} aij 所能通过的最大流量。
定义 2 —— 满足下列条件的网络流 f f f 称为可行流。
(1)容量限制条件。即每条弧上的流量满足 0 ≤ f ( v i , v j ) ≤ c i j . 0 \leq f(v_i,v_j) \leq c_{ij}. 0≤f(vi,vj)≤cij.
(2)平衡条件。对于中间点,流出量和流入量相等。对于起点,记所有从起点流出的流量,减去流进起点的流量为 V ( f ) V(f) V(f) ;对于终点,所有从终点流出的流量,减去流进终点的流量为 − V ( f ) . -V(f). −V(f).
V ( f ) V(f) V(f) 即为可行流 f f f 的流量,即起点的净输出量或终点的净输入量。
可行流总是存在的,如所有弧的流量 f i j f_{ij} fij 均取 0 ,就是一个可行流, V ( f ) = 0. V(f)=0. V(f)=0.
定义 3 —— 网络中可能会有多条可行流,其中流量最大的可行流我们称为最大流。
设 μ = ( x , ⋯ , u , v , ⋯ , t ) \mu=(x,\cdots,u,v,\cdots,t) μ=(x,⋯,u,v,⋯,t) 是网络 G G G 中的一条初等链(各个顶点均不相同),定义链的方向为 x → t x\to t x→t 。若链上有弧 ( u , v ) (u,v) (u,v) 的方向与 μ \mu μ 的方向一致,称其为前向弧,所有前向弧记为 μ + \mu^+ μ+ 。若链上有弧 ( v , u ) (v,u) (v,u) 的方向与 μ \mu μ 的方向相反,称其为后向弧,所有后向弧记为 μ − \mu^- μ− 。
对于一个可行流 f = { f i j } f=\{f_{ij}\} f={fij} ,我们把网络中使 f i j = c i j f_{ij}=c_{ij} fij=cij 的弧称为饱和弧,使 f i j < c i j f_{ij}<c_{ij} fij<cij 的弧称为非饱和弧,把 f i j = 0 f_{ij}=0 fij=0 的弧称为零流弧, f i j > 0 f_{ij}>0 fij>0 的弧称为非零流弧。
定义 4 —— 设 f f f 为一个可行流, v s v_s vs 是网络起点, v t v_t vt 是网络终点, μ \mu μ 是从起点到终点的一条链,若 μ \mu μ 满足下列条件:
(1)所有前向弧均为非饱和弧。(2)所有后向弧均为非零流。
则称 μ \mu μ 为关于可行流 f f f 的一条增广链。
定义 5 —— 对于有向网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) ,若 S S S 为 V V V 的子集, S ‾ = V − S \overline{S}=V-S S=V−S ,则称弧集合 ( S , S ‾ ) = { a ∣ a = ( u , v ) , u ∈ S , v ∈ S ‾ } (S,\overline{S})=\{a|a=(u,v),u\in S,v\in\overline{S}\} (S,S)={a∣a=(u,v),u∈S,v∈S} 为网络 G G G 的一个截集,并将截集中所有弧容量之和称为截容量,简称截量。所有截集中截量最小的称为最小截,其容量为最小截量。
感觉这不就是割集的意思嘛,不过是在有向图中。比如下图,如果 S = { v 2 , v 3 , v 4 , v 5 , v 6 } S=\{v_2,v_3,v_4,v_5,v_6\} S={v2,v3,v4,v5,v6} ,截集为 { ( v 2 , v 1 ) , ( v 3 , v 1 } \{(v_2,v_1),(v_3,v_1\} {(v2,v1),(v3,v1} 。不能加上 ( v 1 , v 4 ) (v_1,v_4) (v1,v4) ,它不是这个截集中的,因为它的起点不在集合 S S S 中。
4.1.2 有关定理
定理 1 —— 若 f ∗ f^* f∗ 是网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) 上的可行流,则可行流 f ∗ f^* f∗ 为最大流的充要条件为 G G G 中不存在关于 f ∗ f^* f∗ 的增广链 μ \mu μ 。
定理 2(最大流量、最小截量定理) —— 任一网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) 中,从起点 v s v_s vs 到终点 v t v_t vt 的最大流的流量,等于分离 v s v_s vs 与 v t v_t vt 的最小截集的容量。
4.2 寻找最大流的标号法
寻找最大流的标号法,是由 Ford(福特)和 Fulkerson(福克尔逊)首先提出来的,所以又称 2F 算法。
2F 算法可以分为两大过程。首先是标号过程,检查是否存在增广链,如果不存在,现行流就是最大流;否则,进入调整过程,也叫增值过程。标号与调整过程如下。
(1)标号过程
先给起点 v s v_s vs 标上 ( 0 , + ∞ ) (0,+\infty) (0,+∞),不断其它点 v i , v j v_i,v_j vi,vj (包括后向弧),此时有下列两种情况:
- 在前向弧 ( v i , v j ) (v_i,v_j) (vi,vj) 上,若 f i j < c i j f_{ij}<c_{ij} fij<cij ,则给 v j v_j vj 标号 ( v i , l ( v j ) ) (v_i,l(v_j)) (vi,l(vj)) 。其中, l ( v j ) = m i n { l ( v i ) , c i j − f i j } l(v_j)=min\{l(v_i),c_{ij}-f_{ij}\} l(vj)=min{l(vi),cij−fij} 。
- 在后向弧 ( v j , v i ) (v_j,v_i) (vj,vi) 上,若 f j i > 0 f_{ji}>0 fji>0 ,则给 v j v_j vj 标号 ( − v i , l ( v j ) ) (-v_i,l(v_j)) (−vi,l(vj)) 。其中, l ( v j ) = m i n { l ( v i ) , f j i } l(v_j)=min\{l(v_i),f_{ji}\} l(vj)=min{l(vi),fji} 。
重复上述步骤,一旦终点 v t v_t vt 得到标号,表明得到一条增广链,进入调整过程。
若标号过程进行不下去,则算法结束,此时可行流即为最大流。
(2)调整过程
首先根据各点标号进行回溯,找出增广链。增广链的调整量 θ \theta θ 为终点 l ( v t ) l(v_t) l(vt) 。
令 f i j ′ = { f i j + l ( v t ) , ( v i , v j ) ∈ μ + f i j − l ( v t ) , ( v i , v j ) ∈ μ − f i j , e l s e f'_{ij}=\begin{cases} f_{ij}+l(v_t), & (v_i,v_j)\in \mu^+ \\ f_{ij}-l(v_t), & (v_i,v_j)\in \mu^- \\ f_{ij},& else\\ \end{cases} fij′=⎩ ⎨ ⎧fij+l(vt),fij−l(vt),fij,(vi,vj)∈μ+(vi,vj)∈μ−else 即现行流中的前向弧加上调整量,后向弧减去调整量,现行流外的流量不变。
对新流 f i j ′ f_{ij}' fij′ ,重新进行标号过程。
写在最后
最大流问题,相较于之前的最短路还是较为简单些的,不过这只是一个载体,后面结合了最小费用流可就不简单了。
相关文章:
【管理运筹学】第 7 章 | 图与网络分析(4,最大流问题)
系列文章目录 【管理运筹学】第 7 章 | 图与网络分析(1,图论背景以及基本概念、术语、矩阵表示) 【管理运筹学】第 7 章 | 图与网络分析(2,最小支撑树问题) 【管理运筹学】第 7 章 | 图与网络分析…...
linux学习总结
shell 1.在文本环境下,shell作为命令解释器,建立了用户和操作系统之间的接口。当用户键入一个命令时,shell将对该命令进行解释,并调用相应的程序。2.Linux下有多个shell,最常用的3个shell: bash tcsh zsh3.shell …...
【API 管理】什么是 API 管理,为什么它很重要?
当今复杂的数字生态系统由许多相互关联的部分组成。API 作为看门人和连接器在其中发挥着关键作用——提供了许多最终用户甚至没有注意到的自动化机会和效率。 企业密切关注 API。它们对于应用程序、数据和各种客户交互的功能至关重要。 这使得 API 管理成为几乎每个部门的组织…...
基于人体呼出气体的电子鼻系统的设计与实现
基于人体呼出气体的电子鼻系统的设计与实现 摘要 电子鼻技术是通过模式识别技术对传感器采集的人体呼出气体进行分类训练的方法。本文研究实现的电子鼻系统包括下面几个部分:首先搭建以Arduino为控制核心的气路采集装置,包括MOS传感器和双阀储气袋构建的传感器阵列和…...
OPC发展历程
目录 1 opc 发展历程 1.1 OPC产生的背景 1.2 经典OPC 1.3 OPC UA 2 OPC DA简介 2.1 OPC Server/Client 2.2 OPC Server 2.3 OPC数据更新 2.4 读取数据方式 3 OPC XML简介 3.1 诞生由来 3.2 功能服务 1 opc 发展历程 OPC是英文“OLE for Process Control”的缩写&am…...
第69步 时间序列建模实战:ARIMA建模(R)
基于WIN10的64位系统演示 一、写在前面 这一期,我们使用R进行SARIMA模型的构建。 同样,这里使用这个数据: 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Re…...
【多线程】CountDownLatch
CountDownLatch 同时等待 N 个任务执行结束. 好像跑步比赛,10个选手进行比赛, 所有选手都通过终点,才能公布成绩。 代码示例: 构造 CountDownLatch 实例, 初始化 10 表示有 10 个任务需要完成.每个任务执行完毕, 都调用 latch.countDown() . 在 Count…...
使用 docker buildx 构建跨平台镜像 (QEMU/buildx/build)
目录 1. 使用 buildx 构建跨平台镜像1.1. 简介1.2. 安装1.3. 构建跨平台镜像1.4. 跨平台镜像构建策略1.4.1. 在内核中使用 QEMU 仿真支持1.4.2. 使用相同的构建器实例在多个本机节点上构建。1.4.3. 使用 Dockerfile 中的多阶段构建, 交叉编译到不同的平台架构中。 1.5. 创建 bu…...
算法|Day49 动态规划17
LeetCode 647- 回文子串 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目描述:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子…...
Linux nohup命令
nohup命令 no hang up 在后台启动命令,终端关闭 程序依然可以执行 1.在后台启动命令 命令 nohup COMMAND2.使用nohup命令在后台启动COMMAND, 并将所有标准输出都重定向到fileA nohup COMMAND > /path/fileA 2>&1 &# COMMAND 需要运行的命令 # &g…...
SQL Server 跨库/服务器查询
这里写目录标题 1 SQL Server 跨库/服务器查询1.1 跨库查询1.2 跨服务器查询1.2.1 创建链接服务器1.2.2 跨库查询 1.3 拓展:SQL Server 中所有权和用户与架构的分离 1 SQL Server 跨库/服务器查询 1.1 跨库查询 在同一服务器下的跨库查询较为简单,示例…...
word转PDF文件变小,图片模糊
word论文29M,文件——另存为——只有1.5M左右,图片压缩严重,图片看不清。 word中很多大图,5M一张的图,所以word很大。 找了很多方法,转换后都在2M左右,勉强可以。 直到找到了这个,…...
被删除并且被回收站清空的文件如何找回
文件的意外删除和回收站清空是许多用户面临的普遍问题。这种情况下,很多人会感到无助和焦虑,担心自己的重要文件永远丢失。然而,幸运的是,依然存在一些有效的方法能够帮助我们找回被删除并且被回收站清空的文件。 ▌被删除文件在…...
每日两题 131分割回文串 784字母大小写全排列(子集模版)
131 131 题目 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s “aab” 输出:[[“a”,“a”,“b”]…...
Java面试八股文宝典:初识数据结构-数组的应用扩展之HashMap
前言 除了基本的数组,还有其他高级的数据结构,用于更复杂的数据存储和检索需求。其中,HashMap 是 Java 集合框架中的一部分,用于存储键值对(key-value pairs)。HashMap 允许我们通过键来快速查找和检索值&…...
ES6 特性
一、ES6 1.1 ES6 概念 1.1.1 什么是 ES ES 全称 EcmaScript 是脚本语言的规范JavaScript 是 EcmaScript 的一种实现ES 新特性就是指 JavaScript 的新特性 1.1.2 为什么要使用 ES 语法简单,功能丰富框架开发应用前端开发职位要求 1.1.3 为什么要学习 ES6 ES6 …...
重拾html5
新增的position: sticky; 基于用户的滚动位置来定位,粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换。ie15以上的低版本不支持,Safari 需要使用 -webkit- prefix; vertical-align: midd…...
递归学习——记忆化搜索
目录 编辑 一,概念和效果 二,题目 1.斐波那契数 1.题目 2.题目接口 3.解题思路 2.不同的路径 1.题目 2.题目接口 3.解题思路 3.最长增长子序列 1.题目 2.题目接口 3.解题思路 4.猜数字游戏II 1.题目 2.题目接口 3.解题思路 总结&a…...
ChatGPT帮助一名儿童确诊病因,之前17位医生无法确诊
9月13日,Today消息,一位名叫Alex的4岁儿童得了一种浑身疼痛的怪病,每天需要服用Motrin(美林)才能止痛。3年的时间,看了17名医生无法确诊病因。(新闻地址:https://www.today.com/heal…...
Laf 云开发平台及其实现原理
Laf 产品介绍 自我介绍 大家好,我是来自 Laf 团队的王子俊,很高兴今天能在这里给大家分享我们 Laf 云开发平台及其实现原理。本来想说一点什么天气之类的话作为开头,但主持人都说完啦,我就不多说了,还是直接开始今天…...
浅谈STL|STL函数对象篇
一.函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质: 函数对象(仿函数)是一个类,不是一个函数 特点 函数对象在使用时,可以像普通函数那…...
自建私人图床方案:使用Cpolar+树洞外链轻松部署超轻量级图床,实现高效图片存储
文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3 Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语…...
从零基础到精通Flutter开发:一步步打造跨平台应用
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 导言 Flutter是一种流行…...
SpringBoot整合WebSocket【代码】
系列文章目录 一、SpringBoot连接MySQL数据库实例【tk.mybatis连接mysql数据库】 二、SpringBoot连接Redis与Redisson【代码】 三、SpringBoot整合WebSocket【代码】 四、SpringBoot整合ElasticEearch【代码示例】 文章目录 系列文章目录代码下载地址一、效果演示二、引入依赖…...
微服务 第一章 Java线程池技术应用
系列文章目录 第一章 Java线程池技术应用 文章目录 系列文章目录[TOC](文章目录) 前言1、Java创建线程方式回顾1.1、继承Thread类(只运行一次)1.1.1、改造成主线程常驻,每秒开启新线程运行1.1.2、匿名内部类1.1.3、缺点1.1.4、扩展知识:Java内部类1.1.4…...
行业追踪,2023-09-14
自动复盘 2023-09-14 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…...
传输层协议--UDP
引入 传输层负责数据能够从发送端传输到接收端。 端口号(Port) 端口号标识了一个主机上进行通信的一个进程。 两个问题: 1. 一个进程可以绑定多个端口号吗?--可以 2.一个端口号可以绑定多个进程吗?--不可以 我们…...
微信会员卡开发流程
功能需求: 通过微信第三方平台创建的模板小程序,想要实现用户在小程序支付一定金额后领取会员卡,领取会员卡后可给用户下发一定数量的优惠券,并且实现用户在小程序消费享受商品折扣。 开发流程: 一、了解微信的3个平…...
《算法竞赛·快冲300题》每日一题:“点灯游戏”
《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 点…...
常见高级语言的输入与输出训练(一)
文章目录 题目概述1 输入描述: 输出描述: 输入 输出 示例C语言代码 题目概述2 题目描述 输入描述: 输出描述: 输入 输出 示例Java代码 前言 本文主要讲解两个算法题的代码实现 题目概述1 计算ab 打开以下链接可以查看正确的代码 数据范围:数据组数满…...
做设计常用的素材网站/一个新产品策划方案
WebStorm 2019 for mac是JetBrains公司旗下一款很好用的JavaScript开发工具。,支持自动代码完成,动态代码分析,重构支持以及VCS集成,功能强大,被誉为最智能的JavaScript IDE。WebStorm 2019 Mac破解版最大的特点是支持…...
做图文链接网站/一个新手如何推销产品
Windows 10系统是微软独立发布的最后一个Windows版本,下一代Windows都将作为更新形式出现,因此,WIN10都会开启自动更新,当我们使用电脑WIN10的时候,老是提示我们需要更新系统,很烦人,那么怎么关…...
设计师可以做兼职的网站有哪些/网页设计与制作模板
RestCloud API服务编排平台,更轻量、更高性能的API可视化编排平台,基于微服务架构、快速构建企业服务总线、全面提升敏捷集成能力、每日调度API流程超过100W。 一、真正的高性能服务编排引擎 1、首创基于纯内存的流程调度引擎,是支持高频调度…...
优质做网站价格/线上培训
Java基础语法 今日内容介绍 u 方法 第1章 方法 1.1 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法。 如:小明同学在路边准备坐车来学校学习。这就面临着一件事情(坐车到学校这件事情)需要…...
驻马店百度seo/seo论坛
前言 现在大多数开发者都有自己的GitHub账号,很多公司也会以是否有GitHub作为一项筛选简历以及人才的选项了,可见拥有一个GitHub账号的重要性,本文就从最基本的GitHub账号的注册到基本的使用进行学习记录,一方面方便自己ÿ…...
自动做reference的网站/关键词优化外包服务
708期吕泽曦 10岁陕西省渭南市大荔县洛滨小学大思班级:四年级(218)班报名时间:2019年8月6日学习时长:195小时课程进度:第一级课程3 基础副词孩子自己追求的答案记得最牢,我们应该给她探索和进步的空间。——吕泽曦妈…...