【墨鳌】【网络流】【Network Flow】

author: 墨鳌

github: https://github.com/MoAo-01

1 写在前面

内容基于 XJTLU INT202 Lecture11 P13

很多同学对于图论了解较少,更不要说是网络流,作为一种高级的图论问题的解题模型,我们需要先了解清楚它,然后才能较好的应用它。写此文章记录总结,希望能帮助更多同学。

2 网络流与图

网络流的存储本质上也是图的存储,建模完成后可以用已有算法解决相关图论问题。

和一般图区别在于:

  1. 网络流的图存储为有向图,即边存储是具有方向性的,从 $ s\rightarrow t$ 方向为正方向,反之为负方向。
  2. 网络流存边时,除了权值外,还存储一个额外的属性,当前边通过的流量 f(flow),用于后续增广。

\[E_0=set(e(u,v,w))\rightarrow E_1=set(e(u,v,w,f))\\ G(E_0,V)\rightarrow G(E_1,V) \]

3 网络流的直观理解

先解释一下网络流这个名称吧,其实就是我瞎掰头,看得懂就好,看不懂当我没说辣🤣

网络——顾名思义,图存储包含许多节点和他们之间的连边,纵横交错,形成网状结构,故称为网络。

流——这个解释起来稍微复杂一点,现在基于 \(2\) 中的定义,把每条边想象成水管(水的流向为唯一确定方向),那么根据定义,我们可以让一定量的水在网络中流动起来,这就是流的由来。

4 网络流问题的引入

有了网络流的理解,想必你就会好奇了,对于某个特定的网络,我们能使多少水让这个网络"跑"起来呢?

  • 这里我们需要注意的是,我们不用考虑每个节点瞬时的流量上限,也就是说我们假设节点流量上限为无限大
  • 分流和合并都不用考虑水流速度问题,只需保证单边的流量不超过容量(权值)即可

这就是一个经典的网络流最大流问题

5 网络流最大流与与最小割定理

最大流定义

通过一种组合优化的方式,使得运输的流量最大。

最小割定义

找到一种选择方式,删除网络流中一个边集,使得 \(s\not\rightarrow t\) 的最小代价(删除单边的代价定义为其权值,即流量上限)。

定理的直观理解

网络流最大流与与最小割定理的意思是说:这两者的结果是相等的。这里不给出证明,只给出直观理解。

基于 \(3,4\) 的假设,现在有起点 \(s\) 和终点 \(t\) ,需要求得:通过网络流,从 \(s\rightarrow t\) 的最大流。根据定义,我们可以直观习得,对于任意一种切割方式,可以唯一对应一个当前的可行流量。其计算方式为选中的每条边的权值和。在众多的切割方式中,必然存在开销最小的方案,我们称之为最小割。此时,我们能找到一种对于的组合方式,即网络流的最大流,若不是最小割,一个显而易见的情况是,删除所有边是一个可行的割边集,但是开销太大,也不会有足够的流量能到达。

当且仅当,\(可行流流量_{max}=割边集开销_{min}\) ,即,最大流与与最小割定理成立。

6 网络流增广算法

  • Ford-Fulkerson \(《算法(第四版)》P584\)
  • Edmonds-Karp
  • dinic

通用核心思想,引入"反向边"的概念,运行部分"回流",在递归搜索中回溯,从而每次找到可以增广(增加)的路径和流量。

Lecture11 练习例题

  • 注意红色的部分,划掉的数字其实是在进行增广,并不是写错了
  • 顺序为先增广黑色部分,后增广红色部分,图四红色部分是未使用的边
  • 两种结果均为 \(28\)
13295024825697005
posted @ 2022-04-21 22:40  墨鳌  阅读(188)  评论(0编辑  收藏  举报