• 网络流算法


    网络流

    本文参考了南京大学蒋炎岩老师的讲解(B站视频链接)

    考虑割的定义

    对于有向图 G ( V , E ) G(V,E) G(V,E)
    对于DFS/BFS,每次搜索会将新的节点 v ∈ V v \in V vV 纳入已经搜索的集合 S S S

    则对于尚未搜索的部分,定义为集合 V − S = T V - S = T VS=T,则必然存在 S , T S,T S,T 满足 G G G s − t s-t st

    • S ∩ T = V , S ∪ T = ∅ S \cap T = V, S \cup T = \emptyset ST=V,ST=
    • s ∈ S , t ∈ T s \in S, t \in T sS,tT

    即起点/终点分别位于两个集合当中,这个边集合称作割

    定义割的大小 ∣ { ( u , v ) ∈ E ∣ u ∈ S , v ∈ T } ∣ |\{(u,v) \in E|u \in S, v \in T\}| {(u,v)EuS,vT},即按照 S → T S \rightarrow T ST 方向穿过割的边数

    因此对于 G G G 中任意两点间 s → t s \rightarrow t st找不到路径,等价于至少存在一个 s ∈ S , t ∈ T s \in S, t \in T sS,tT s − t s-t st 割大小为 0 0 0

    不止一条路径

    G G G 中有多少不相同的 s → t s \rightarrow t st

    • 可共享节点,不能共享边

    对于大小为 n n n s → t s \rightarrow t st 割,必然存在至多 k ( k ≤ n ) k(k \leq n) k(kn) s → t s \rightarrow t st 的路径(上界)。

    同时,如果能找到 m ( m ≤ k ) m(m \leq k) m(mk) 条不相交路径(下界),就证明了一共有 k k k 条不相交路径。

    寻找不相交路径的数量

    Ford-Fulkerson 算法

    1. 使用DFS/BFS找到一条路径 L L L
    2. 对于 e ∉ L e \not\in L eL,保持方向不变,对于 e ∈ L e \in L eL,将其反向
    3. 对于更新后的图(称作残余网络),重复步骤 1 , 2 1,2 1,2,若不满足 1 1 1,则终止
      对于终止的 Ford-Fulkerson 算法,必有割 s → t s \rightarrow t st 大小为 0 0 0.

    当算法终止时,假设有 m m m 条路径,则必有真实路径数 k , k ≥ m k,k \geq m k,km,若同时有最小割 t = m t = m t=m,则必有路径数量为 k k k

    最大流和最小割

    考虑带权图

    带权图等价于多重边。如权重为 20 20 20 的边 a → 20 b a \rightarrow_{20}b a20b,等价于 20 20 20 条权重为 1 1 1(无权)的边即 20 × a → b 20 \times a\rightarrow b 20×ab

    边的权值称作容量

    若存在 p p p 条有重复边的路径 { x 1 , . . . , x p } \{x_1,...,x_p\} {x1,...,xp},则定义了如下的线性优化目标
    min ⁡ ∑ i = 1 p x i \min \sum\limits ^{p}_{i = 1} x_i mini=1pxi
    其满足约束条件

    x 1 + . . . ≤ a x 2 + . . . ≤ b … x i ≥ 0 x_1 + ... \leq a \\ x_2 + ... \leq b\\\dots\\x_i \geq 0 x1+...ax2+...bxi0
    其中 a , b , . . . a,b,... a,b,... 表示 x 1 , x 2 , . . . x_1,x_2,... x1,x2,... 公共边中最小的容量。这就是网络流的原始表述。

  • 相关阅读:
    Matlab2022b软件如何切换中/英文界面?
    动态代理模式下UndeclaredThrowableException的产生
    全球与中国液体壁纸行业需求趋势及投资策略分析报告2022-2028年
    探索 Java 8 中的 Stream 流:构建流的多种方式
    纯CSS 格子背景
    分块指北
    通过 dump 虚拟机线程方法栈和堆内存来分析 Android 卡顿和 OOM 问题
    AI与大数据:智慧城市安全的护航者与变革引擎
    量子计算的奥秘与魅力:开启未来科技的钥匙(详解)
    项目分析(嵌入式产品Web化)
  • 原文地址:https://blog.csdn.net/qq_44458671/article/details/128026736