Chat Bot

    最大流基础(Maximum Flow Basis)

    1. 最大流问题定义#

    1.1 流网络(Flow network)#

    Def. A flow network is a tuple G=(V,E,s,t,c):

    • Digraph (V,E) with source sV and sink tV.
    • Capacity c(e)0 for each eE.

    定义. 一个流网络可以定义为一个元组G=(V,E,s,t,c), 满足如下条件:

    • 有向图(V,E)中含义一个源点sV以及一个汇点tV.
    • 每条边都有相应的容量c(e)0.

    1.2 最大流问题(Maximum-flow problem)#

    Def. An flow f is a function that satisfies:

    • For each eE : 0f(e)c(e) [capacity]
    • For each vV{s,t} : e in to vf(e)=e out of vf(e) [flow conservation]

    定义. 一个f是指一个满足如下条件的函数:

    • 对于边eE: 0f(e)c(e). [容量]
    • 对于顶点vV{s,t}: e in to vf(e)=e out of vf(e). [流量守恒]

    Def. The value of a flow f is: val(f)=e out of sf(e)e in to sf(e).

    定义. 一个流f可以定义为: val(f)=e out of sf(e)e in to sf(e).

    Max-flow problem. Find a flow of maximum value.

    最大流问题. 找到一个流,它的值最大.

    2. 最大流问题算法#

    三种解决最大流问题算法, B站upShusenWang的视频.

    2.1 福特-富尔克森算法(Ford–Fulkerson algorithm)#

    13-2: Ford-Fulkerson Algorithm 寻找网络最大流

    2.2 埃德蒙兹-卡普算法(Edmonds-Karp Algorithm)#

    13-3: Edmonds-Karp Algorithm 寻找网络最大流

    2.3 迪尼茨算法(Dinic's algorithm)#

    13-4: Dinic's Algorithm 寻找网络最大流

    3. 扩展#

    3.1 瓶颈边(Bottleneck edge)#

    定义. 流网络中的一条边被称为瓶颈边是指其容量的增加将导致最大流的增加。

    问题. 给出一个识别流网络中瓶颈边的高效算法

    算法如下:

    • 用Ford-Fulkerson算法, 得到最终的剩余图
    • 计算两个集合: 剩余图中所有从源点s可达的节点定义为集合A, 剩余图中所有可以到达汇点t的节点定义为集合B.
    • 任何一个连接集合A中节点到集合B中节点的边e, 都是瓶颈边.

    *第二步中, 求集合A可以通过在剩余图中从源点s深搜求得, 集合B可以通过在剩余图的反向图中从汇点t深搜求得. 此步骤时间复杂度为O(m), 其中m为剩余图中边的数量.

    正确性: 增加e的容量, 一定会使剩余图产生一条新的增广路径, 从而使最大流增大.

    作者:JJVV

    出处:https://www.cnblogs.com/jjvv/p/17149820.html

    版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

    posted @   ㅤJJVVㅤ  阅读(121)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
    · Manus爆火,是硬核还是营销?
    · 终于写完轮子一部分:tcp代理 了,记录一下
    · 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
    · 单元测试从入门到精通
    more_horiz
    keyboard_arrow_up light_mode palette
    选择主题
    menu
    点击右上角即可分享
    微信分享提示