zoukankan      html  css  js  c++  java
  • 最大流

    最大流

    网络流的英文名是network flows,但是具体它是什么呢?

    在这里我们可以把它看作很多现实中存在的东西,当然也是一些网络流能解决的东西,比方说水管流量,电力分配,运输货物时的物流问题,匹配问题等。

    网络是一个各条边都有权值和方向的图。

    给定一个有向图G=(V,E), 把图中的边看作管道,每条边有一个权值,表示该管道的流量上限。给定源点s和汇点t,现在假设在s处有一个水源,t处有一个蓄水池,问从s到t的最大水流量是多少,类似这类的问题都可归结为网络流问题。

    网络流的三个基本特点

    设G=(V,E)是一个流网络,设c(u,v)>=0 表示u到v的管道的流量上限。设s为源,t为汇。G的流是一个函数,且满足下面三个特征:

    容量限制:对于所有的,要求

    斜对称性:对于所有的,要求

    流的保持:对于所有的,要求:

    称为从结点u到v的网络流,它可以为正也可以为负。流f的值定义为:

    , 即从源出发的所有流的总和。

    通俗一点多的解释

    每一条边拥有一个最大的容量c,即该条边可以容纳的最大流量

    f是流过该边的实际流量,且总有

    对于图中每个顶点(源点和汇点除外)都有流出的流量等于流入的流量。

    图中只有一个源点和汇点,且对于源点来说其流入量为0,对于汇点来说流出量为0,源点的流出量等于汇点的流入量,对于最大流问题即是要找出流入汇点的最大流量值。

    残留网络:

    给定流网络G和流量f,残存网络由那些仍有空间对流量进行调整的边构成。流网络的一条边可以允许的额外流量等于该边的容量减去该边上的流量。如果该差值为正,则将该边置于图中,并将其残存容量设置为。对于图G中的边来说,只有能够允许额外流量的边才能加入到图中,如果边(u,v)的流量等于其容量,则其,该边将不属于图。为了表示对一个正流量的缩减,我们将边(v,u)加入到图中,并将其残存容量设置为。

    原始图

    残差网络

    增广路:

    增广路径p是在残留网络中从s到t的一条简单路径,形象的理解为从s到t存在一条不违反边容量的路径,向这条路径压入流量,可以增加整个网络的流值。

    其可以压入4个单位的流量,压入后,我们得到一个新的流网络,其流量比原来的流网络要多4。这时我们继续在新的流网络上用同样的方法寻找增广路径,直到找不到为止。这时我们就得到一个最大的网络流。

    割:

    如果我们想要把一个网络分成两部分,一部分包含源点s,另一部分包含汇点t,我们把这个集合之间,从源集合到汇集合之间的正向流量之和称为是网络的割。

    Ford-Fulkerson

    可以说是一种方法,而不是算法,因为它包含具有不同运行时间的几种实现。Ford-Fulkerson是一种迭代的方法。在残差网络中寻找增广路径使得流值不断增大,直至最大为止。

    基本的Ford-Fulkerson算法

  • 相关阅读:
    docker 部署 zabbix
    docker 搭建私有云仓库
    doeker部署zabbix
    LVS
    zabbix安装与配置
    keepalive
    Shell编程(5)
    Shell编程(4)
    Shell编程(3)
    几种Toast用法
  • 原文地址:https://www.cnblogs.com/kexinxin/p/11537822.html
Copyright © 2011-2022 走看看