zoukankan      html  css  js  c++  java
  • 网络流 简介

    网络流

    维基百科,自由的百科全书
     
     

    图论中,网络流 (Network Flow) 是指在一个每条边都有容量 (Capacity) 的有向图分配,使一条边的流量不会超过它的容量。(边有附带容量的图称为网络。)一道流必须符合一个结点的进出的流量相同的限制,除非这是一个源点 (Source) ──有较多向外的流,或是一个汇点 (Sink) ──有较多向内的流。一个网络可以用来模拟道路系统的交通量、管中的液体、电路中的电流或类似一些东西在一个结点 (Node) 的网络中游动的任何事物。

    目录

      [隐藏

    [编辑]定义

    假设 G(V, E) 是一个有限的有向图,它的每条 (u, v) \in E 都有一个非负值实数的容量 c(u, v) 。如果 (u, v) \not \in E ,我们假设 c(u, v) = 0 。我们区别两个顶点:一个源点 s 和一个汇点 t。一道网络流是一个对于所有结点 u 和 v 都有以下特性的实数函数 f:V \times V \rightarrow \mathbb{R} :

    容量限制 (Capacity Constraints) \ f(u, v) \le c(u, v) 一条边的流不能超过它的容量。
    斜对称 (Skew Symmetry) \ f(u, v) = - f(v, u) 由 u 到 v 的净流必须是由 v 到 u 的净流的相反(参考例子)。
    流守恒 (Flow Conservation) 除非u = su = t,否则\ \sum_{w \in V} f(u, w) = 0 一结点的净流是零,除了“制造”流的源点和“消耗”流的汇点。

    注意 f(u,v) 是由 u 到 v 的流。如果该图代表一个实质的网络,由 u 到 v 有 4 单位的实际流及由 v 到 u 有 3 单位的实际流,那么 f(u, v) = 1 及 f(v, u) = -1

    边的剩余容量 (Residual Capacity) 是 c_f(u, v) = c(u, v) - f(u, v)。这定义了以 G_f(V, E_f) 表示的剩余网络 (Residual Network),它显示可用的容量的多少。留意就算在原网络中由 u 到 v 没有边,在剩余网络仍可能有由 u 到 v 的边。因为相反方向的流抵消,减少由 v 到 u 的流等于增加由 u 到 v 的流。增广路 (Augmenting Path)是一条路径 (u_1, u_2, \dots, u_k),而 u_1 = su_k = tc_f(u_i, u_{i+1}) > 0,这表示沿这条路径传送更多流是可能的。

    [编辑]例子

    一个显示了流及容量的流网络。

    在右边可以看到一个有以 s 标示的源点、以 t 标示的汇点及 4 个额外结点的流网络。流及容量以 f/c 显示。注意网络怎样保证斜对称、容量限制及流守恒。由 s 到 t 的总流量为 5,由此可简单地观察到源于 s 的所有向外流是 5,也就是汇于 t 的向内流。我们知道在其它结点中没有任何流出现或消失。

    上面的流网络的剩余网络,显示了剩余容量。

    在下面你可以看到对既定的流的剩余网络。注意某些边的剩余容量是正数而原来的容量是零,如边 (d, c)。这道流不是一道最大流。沿路径 (s, a, c, t)(s, a, b, d, t) 及 (s, a, b, d, c, t) 还有可用的容量,也就是扩张路径。第一条路径的剩余容量是 \min(c(s, a) - f(s, a), c(a, c) - f(a, c), c(c, t) - f(c, t)) = \min(5 - 3, 3 - 2, 2 - 1) = \min(2, 1, 1) = 1。注意扩张路径 (s, a, b, d, c, t) 在原来的网络中并不存在,但你可以沿它传送流,因此仍是一道正当的流。

    假如这是一个真实的网络,由 a 到 b 的 2 单位的流及由 b 到 a 的 1 单位的流事实上可能存在,但我们只维持流。

    [编辑]算法

    计算最大流最基本的方法是福特富尔克森方法(The Ford-Fulkerson method)、埃德蒙兹卡普算法(The Edmonds-Karp algorithm),由于不同的具体实现方案,其执行效率不同。

    此外,也有一些更复杂的方法如“压入与重标记”及“重标记与迁移”等算法,使时间效率进一步提升,最快可达O (\left|V\right|^3)

    [编辑]应用

    将一连串的水管绘画成一个网络。每条水管有一特定的阔度,因此只可以保持一特定的水流量。当任何水管汇合,流入汇流点的总水量必须等于流出的水量,否则我们会很快地缺水,或者我们会团积水。我们有一个作为源点的入水口,和一个作为汇点的出水口。一道流便是一条由源点到汇点而使从出水口流出的总水量一致的可能路径。直观地,一个网络的总流量是水从出口流出的速率。

    流可以关于在交通网络上的人或物质,或电力分配系统上的电力。对于任何这样的实物网络,进入任何中途结点的流需要等于离开那结点的流。Bollobás基尔霍夫电流定律描绘这限制的特性,同时较迟的作者(即 Chartrand)提及它在某些守恒方程的普遍化。

    生态学中也可找到流网络的应用:当考虑在食物网中不同组织之间养料及能量的流,流网络便自然地产生。与这些网络有联繋的数学问题和那些液体流或交通流网络中所产生的难题有很大分别。由 Robert Ulanowicz 及其他人发展的生态系统网络分析领域包含使用信息论热力学的概念去研究这些网络随时间的演变。

    [编辑]普遍化及专门化

    利用网络流去找出最大流是最简单及最普通的问题,它提供了在一指定的图中由源点到汇点的最大可能总流量。还有很多其它问题可以利用最大流算法去解决,假设它们可以适当地塑造成流网络的模样,例如二部图匹配(Bipartite Matching)、任务分配问题(Assignment Problem)和运输问题(Transportation Problem)。

    多物网络流问题(Multi-commodity Flow Problem)中,可以有多个源点和汇点,和各种各样的由指定源点传送到指定汇点的“物品(Commodities)”。例如这可能是不同的工厂生产的各种各样的货物经由“同一”运输网络运送到不同的消费者手上。

    最少费用流问题(Minimum Cost Flow Problem)中,每条边 u,v 都有特定费用 k(u,v)。沿这条边传送 f(u,v) 的费用是 f(u,v) \cdot k(u,v)。目标是要用最低的成本由源点传送一特定数量的流到汇点。

    环流问题(Circulation Problem)中,每条边除了有上限 c(u,v) 外,还有下限 l(u,v)。每条边亦有一个费用。很多时,流守恒适用于环流问题中所有结点,由汇点到源点亦有一条连结。这样便能利用 l(t,s) 和 c(t,s) 支配总流量。这问题因流环绕网络流动而得名。

    有增益网络普遍化网络中,每条边都有增益,一个实数(非零)使如果这条边有一增益 g 而有一流量 x 的流在尾部流入,便有一流量 gx 的流从头部流出。

  • 相关阅读:
    requireJS 简要介绍和完整例子
    SQL 语句递归查询 With AS 查找所有子节点
    ztree的添加、修改、删除及前后台交互
    JQuery-zTree.js使用范例
    CSS3自定义滚动条样式 -webkit-scrollbar
    jQuery插件定义
    JQuery 插件开发
    jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
    Xml序列化
    wen7安装oracle 11g出现"未找到文件 E:development_toolsdatabaseoracleinstall_ddbhomeowbexternaloc4j_applicationsapplicationsWFMLRSVCApp.ear"
  • 原文地址:https://www.cnblogs.com/acSzz/p/2477129.html
Copyright © 2011-2022 走看看