gitbook-way-to-algorithm
  • Introduction
  • Preface 前言
  • Content 目录
  • MathSymbolTable 数学符号表
  • Chapter-1 BasicKnowledge 第1章 基础知识
    • TimeComplexity 时间复杂度
    • Recursion 递归式
  • Chapter-2 Sort 第2章 排序
    • InsertSort 插入排序
    • BubbleSort 冒泡排序
    • QuickSort 快速排序
    • MergeSort 归并排序
  • Chapter-3 Search 第3章 搜索
    • BinarySearch 二分查找法(折半查找法)
    • AdditionMultiplicationPrinciple 加法乘法原理
    • BruteForce 暴力枚举
    • Recursion 递归
    • BreadthFirstSearch 广度优先搜索
    • BidirectionalBreadthSearch 双向广度搜索
    • AStarSearch A*搜索
    • DancingLink 舞蹈链
  • Chapter-4 DataStructure 第4章 数据结构
    • DisjointSet 并查集
    • PrefixTree(TrieTree) 前缀树
    • LeftistTree(LeftistHeap) 左偏树(左偏堆)
    • SegmentTree 线段树
    • FenwickTree(BinaryIndexedTree) 树状数组
    • BinarySearchTree 二叉查找树
    • AVLTree AVL平衡树
    • RedBlackTree 红黑树
    • SkipList 跳跃表
    • BPlusTree B+树
    • BMinusTree B-树
  • Chapter-5 DynamicProgramming 第5章 动态规划
    • Section-1 LinearDP 第1节 线性动规
      • LongestCommonSubsequence 最长公共子序列
      • LongestIncreasingSubsequence 最长递增子序列
      • BidirectionalSubsequence 双向子序列
      • MaximumContinuousSubsequenceSum 最大连续子序列和
      • LongestPalindromicSubsequence 最长回文子序列
    • Section-2 BagDP 第2节 背包问题
      • 01-Bag 01背包
      • CompleteBag 完全背包
      • TwoDimensionBag 二维背包
    • Section-3 RegionalDP 第3节 区域动规
      • MinimumMergeCost - 最小合并代价
      • UniquePath 唯一路径
      • TrianglePath 三角形路径
    • Section-4 TreeDP 第4节 树形动规
      • MaximumBinaryTree 最大二叉树
      • MaxMultipleTree 最大多叉树
      • MaximumBinaryTreeRadiusSum 最大二叉树和
  • Chapter-6 GraphTheory 第6章 图论
    • Section-1 Traverse 第1节 遍历
      • DepthFirstSearch 深度优先搜索
      • BreadthFirstSearch 广度优先搜索
      • TopologicalSort 拓扑排序
      • EulerCycle 欧拉回路
    • Section-2 MinSpanningTree 第2节 最小生成树
      • Kruskal Kruskal算法
      • Prim Prim算法
    • Section-3 ShortestPath 第3节 最短路径
      • BellmanFord BellmanFord算法
      • Dijkstra Dijkstra算法
      • FloydWarshall FloydWarshall算法
      • DifferentConstraints 差分约束
    • Section-4 StronglyConnectedComponents 第4节 强连通分支
      • Kosaraju Kosaraju算法
      • Tarjan Tarjan算法
      • 2-SAT 2-SAT问题
    • Section-5 NetworkFlow 第5节 网络流
      • EdmondsKarp EdmondsKarp算法(最短路径增广算法)
      • PushRelabel 压入与重标记算法
      • Dinic - Dinic算法
      • MinimumCostFlow - 最小费用流
      • MultipleSourceMultipleSinkMaxflow - 多源点多汇点最大流
    • Section-6 BinaryMatch 第6节 二分匹配
      • Hungarian 匈牙利算法
      • HopcroftKarp Hopcroft-Karp算法
      • MatchToMaxflow 二分匹配转化为最大流
      • KuhnMunkres Kuhn-Munkres算法
      • Introduction-Domination,Independent,Covering,Clique 介绍支配集、独立集、覆盖集和团
      • WeightedCoveringAndIndependentSet 最小点权覆盖和最大点权独立集
      • MinimumDisjointPathCovering 最小不相交路径覆盖
      • MinimumJointPathCovering 最小可相交路径覆盖
      • Coloring 染色问题
  • Chapter-7 CombinatorialMathematics 第7章 组合数学
    • FullPermutation 全排列
    • Combination 组合
    • Permutation 排列
    • PermutationGroup 置换群
  • Chapter-8 NumberTheory 第8章 数论
    • PrimeSieve 素数筛法
    • GreatestCommonDivisor 最大公约数
    • Euclid 欧几里得算法
    • ExtendedEuclid 扩展欧几里得算法
    • ChineseRemainerTheorem 中国剩余定理
    • ModularExponentiation 模幂运算
  • Chapter-9 LinearAlgebra 第9章 线性代数
    • Section-1 Matrix 第1节 矩阵
      • Strassen Strassen算法
      • GaussElimination 高斯消元法
      • LUP LUP分解
      • InverseMatrix 矩阵求逆
    • Section-2 LinearProgramming 第2节 线性规划
      • Simplex 单纯形算法
      • Dinkelback Dinkelback算法
  • Chapter-10 AnalyticGeometry 第10章 解析几何
    • Section-1 Polygon 第1节 多边形
      • Cross 向量叉积
      • SegmentIntersection 线段相交
      • Sweeping 扫除算法
      • ConvexPolygonArea 凸多边形面积
      • ConvexPolygonGravityCenter 凸多边形重心
      • NearestNeighbor 最近点对
    • Section-2 ConvexHull 第2节 凸包
      • GrahamScan Graham扫描算法
      • QuickHull 快速凸包算法
      • RotatingCalipers 旋转卡壳
  • Chapter-11 PatternMatch 第11章 文本匹配
    • SimpleMatch 简单匹配
    • AhoCorasickAutomata AC自动机
    • KnuthMorrisPratt KMP匹配算法
    • RabinKarp RabinKarp算法
    • BoyerMoore BoyerMoore算法
  • Chapter-12 GameTheory 第12章 博弈论
    • BashGame 巴什博弈
    • WythoffGame 威佐夫博弈
    • NimGame 尼姆博弈
Powered by GitBook
On this page
  • Section-5 Network Flow
  • 第5节 网络流
  • 网络流(Network Flow)/最大流(Max Flow)
  • Introduction To Algorithms
  • 图论术语
  1. Chapter-6 GraphTheory 第6章 图论

Section-5 NetworkFlow 第5节 网络流

Previous2-SAT 2-SAT问题NextEdmondsKarp EdmondsKarp算法(最短路径增广算法)

Last updated 6 years ago

Section-5 Network Flow

第5节 网络流

网络流(Network Flow)/最大流(Max Flow)

一片区域中有很多个城市,彼此间用公路相连,每条公路有自己能够运输的最大重量。城市AAA生产货物,城市BBB消费货物,通过公路将城市AAA产生的货物运送到城市BBB消费,经过其他城市。

满足:

最大流(Max Flow)是单源点、单汇点、边的容量为正整数的网络,其剩余网络无法找出更多增广路径的流。

Introduction To Algorithms

图论术语

上图是一个有向图DG=<V,E>DG = <V,E>DG=<V,E>,假设城市AAA每天产生的货物数量无穷多,城市BBB每天能够消费的货物数量无穷多,每条边的数字表示该公路每天最多运送的货物数量,红色弧边的数字表示当整个运输网络充满时一条公路实际每天运送的货物数量。所有的红色弧边组成一组解,表示城市A,BA, BA,B之间每天最多能够运输的货物。显然这样的解可以有多个。

网络流(Network Flow)是指在一个每条边都有容量(Capacity)的有向图分配流,使一条边的流量不会超过它的容量。运筹学中通常将有向图称为网络,顶点称为节点(Node)而边称为弧(Arc)。一道流必须匹配一个结点的进出的流量相同的限制,除非这是一个源点(sss)──有较多向外的流,或是一个汇点(ttt)──有较多向内的流。一个网络可以用来模拟道路系统的交通量、管中的液体、电路中的电流或类似一些东西在一个结点的网络中游动的任何事物。上面两个城市之间运输货物的例子就是典型的网络流问题,每个城市是一个节点,城市AAA是源点sss,城市BBB是汇点ttt,公路是弧。

有向图DG=<V,E>DG = <V,E>DG=<V,E>的边eu,v∈Ee_{u,v} \in Eeu,v​∈E都有一个容量cu,vc_{u,v}cu,v​(若eu,v∉Ee_{u,v} \notin Eeu,v​∈/E则认为cu,v=0c_{u,v} = 0cu,v​=0),设源点为sss汇点为ttt。一道网络流是对于有向图DGDGDG中所有节点u,vu, vu,v都有以下特性的实数函数:

f:V×V→Rf : V \times V \rightarrow Rf:V×V→R

(1)(1)(1) 容量限制(Capacity Constraints):f(u,v)≤c(u,v)f(u,v) \leq c(u,v)f(u,v)≤c(u,v),表示一条边的流不能超过其容量;

(2)(2)(2) 反对称(Skew Symmetry):f(u,v)=−f(v,u)f(u,v) = -f(v,u)f(u,v)=−f(v,u),表示由uuu到vvv的净流必须是由vvv到uuu的净流的相反;

(3)(3)(3) 流守恒(Flow Conservation):除非u=su = su=s或u=tu = tu=t,否则∑w∈Vf(u,w)=0\sum_{w \in V} f(u, w) = 0∑w∈V​f(u,w)=0,表示节点uuu的净流是000,除了sss和ttt;

(4)(4)(4) 网络流中除了源点汇点外的任意节点,都满足流守恒:

∑(u,v)∈Ef(u,v)=∑(v,z)∈Ef(v,z)\sum_{(u,v) \in E} f(u,v) = \sum_{(v,z) \in E} f(v,z)(u,v)∈E∑​f(u,v)=(v,z)∈E∑​f(v,z)

表示对于除源点汇点外任意节点u,v,z∈V\s,tu, v, z \in V \backslash {s, t}u,v,z∈V\s,t,所有流向节点vvv的流等于从节点vvv流出的流;

(5)(5)(5) 若由uuu到vvv有444单位的流,而由vvv到uuu有333单位的流,那么实际f(u,v)=1,f(v,u)=−1f(u,v) = 1, f(v,u) = -1f(u,v)=1,f(v,u)=−1;

(6)(6)(6) 边的剩余容量(Residual Capacity)是

cf(u,v)=c(u,v)−f(u,v)c_f (u,v) = c(u,v) - f(u,v)cf​(u,v)=c(u,v)−f(u,v)

边的剩余容量定义了剩余网络(Residual Network)Gf=<V,Ef>G_f = <V, E_f>Gf​=<V,Ef​>,表示该网络的可用容量。

网络中的增广路径是剩余网络中的一条路径(u1,u2,…,un)(u_1, u_2, \dots, u_n)(u1​,u2​,…,un​),其中u1u_1u1​是源点sss,unu_nun​是汇点ttt,且其中每条边的剩余容量都满足cfui,ui+1>0c_f{u_{i}, u_{i+1}} \gt 0cf​ui​,ui+1​>0(其中1≤i<i+1≤n1 \leq i \lt i+1 \leq n1≤i<i+1≤n)。

VI.Graph Algorithms
https://en.wikipedia.org/wiki/Glossary_of_graph_theory_terms
EdmondsKarp - EdmondsKarp算法(最大路径增广算法)
PushRelabel - 压入与重标记算法
Dinic - Dinic算法
MinimumCostFlow - 最小费用流
MultipleSourceMultipleSinkMaxflow - 多源点多汇点最大流
KnowledgePoint1.png