首页 > 其他分享 >网络流

网络流

时间:2023-11-17 12:36:18浏览次数:17  
标签:剩余 容量 增广 网络 流量 反向

网络流是图论中一个博大精深的分支。

一个网络G=(V,E)是一张有向图,途中每条有向边(x,y)属于E,都有一个给定的权值c(x,y),称为边的容量。特别地,若(x,y)不属于E,则(c,x)=0。称为边的容量途中还有两个指定的特殊节点S属于V和T属于V(S不等于T),分别称为原点汇点

f(x,y)是定义在二元组(x属于V,y属于V)上的实数函数,且满足:

1.边的流量小于边的容量。f(x,y)<c(x,y)

2.x到y的流量和y到x的流量是相反数。f(x,y)=-f(y,x)

3.x的流入量和流出量是相等的。

f称为网络流的流函数。f(x,y)称为边的流量,c(x,y)-f(x,y)是边的剩余流量。

所有与S->v的f(s,v)之和是整个网络的流量。

图中每条边的反向边其实都有一个负的流量。

流量守恒定律告诉我们网络中除了原点和汇点以外,每个点的流入量和流出量是一样的。


 

最大流

对于一个给定的网络,合法的流函数有很多,其中使从S流出的流最大的流函数,被称为网络流的最大流,此时的流量被称为最大流量。

对于二分图的最大匹配问题,我们可以新增加一个原点和汇点,左部点连接S,右步点连接T,网络中每条边的容量都是1。二分图的最大匹配数就是网络的最大流量。

流过的边和点就是匹配边和匹配点。

另外的,如果要求二分图的多重匹配,改变一下边的容量就可以了。

(S连接左部点的边的容量,T连接右部点的边的容量,左部点和右部点的边的容量是1)


 

Edmonds-Karp增广路算法

增广路定义:一条从源点S到汇点T的各条边的剩余容量都大于0的路径。

可以让一股流沿着增广路到达T,使得网络的流量增大。

Edmonds-karps的思想就是不断用BFS寻找一条增广路,直到网络上不再存在增广路为止。

该算法在寻找增广路的过程中只考虑f(x,y)<c(x,y)的所有边,用BFS找到一条从S到T包含边数最小的路径,同时计算出该路径上的所有边中剩余容量的最小值minf,则整个网络的流量就可以增加minf。

值得注意的是一条边的反向边的容量是负数。

在存储图的时候,把网络中的有向边和反向边存在相邻的位置,这样会方便查询,例如a在(2),a‘在(3),b在(4),b’在(5)

这样所有的正向边都在下标为偶数的邻接表中,所有反向边都在下标为奇数的邻接表中。

当一条边流过(x,y)时,剩余容量减少e,(y,x)的剩余容量增加e

(反向边的存在其实就是为了提供反悔的机会,如果我们的正向边的容量减少了1,就代表有流量1流出了该边,如果不存在反向边,也就是一定让流从这个点流出去1个,可能会导致有一些更加优秀的也需要从这个点流出去的流没有办法流出去。所以我们提供一个返回的机会,让原来的那个流按照接下来的这个流流动的方式流到T(也不一定是全部,可能只是之前的一些流量,相当于分流),而现在的流相当于采用了原来的流的路径(路径是采用了,但是流量可能不一样,可能是代替了原来流的其中一部分流量,而原来流的这一部分采用了一种(也就是现在新找的)新的流出方式))。

反向边是个好东西(但对于**不好的我来说,可能有点抽象)

时间复杂度O(mn),一般能处理1e3~1e4的网络))))有点玄学)


 

Dinic算法

残留网络:在任意时刻,网络中所有的节点以及剩余容量大于0的边所构成的子图。

Edmonds-Karp算法每轮可能会遍历整个残留网络,但只找出了一条增广路,进步空间大大的大(想起了某国peron)!

节点的层次d[x]:从S到x最少需要经过的边数。

在残留网络中,满足d[y]=d[x]+1的边(x,y)构成的子图被称为分层图

该分层图是一张有向无环图。(这跟原图有没有环没有关系)

步骤:(cycle)

1.在残留网络上BFS求出节点的层次,构造分层图。

具体地:从S开始,不断向外扩展。顺便可以加上当前弧优化:我们建立好了一张分层图以后,就不断一条一条有方向性的寻找增广路。但是从有一些边走注定不能找到增广路,再走一遍没有意义,所以记录一下,下次跳过这些边。

2.在DFS寻找增广路,在回溯时更新剩余容量。

时间复杂度O(nm)一般能处理1e4~1e5规模的网络。


 

标签:剩余,容量,增广,网络,流量,反向
From: https://www.cnblogs.com/ybC202444/p/17838430.html

相关文章

  • “技能兴鲁”职业技能大赛-网络安全赛项-学生组初赛 Crypto WP
    babyRSA查看代码fromgmpy2import*fromCrypto.Util.numberimport*flag='flag{I\'mnotgonnatellyoutheFLAG}'#这个肯定不是FLAG了,不要交这个咯p=getPrime(2048)q=getPrime(2048)m1=bytes_to_long(bytes(flag.encode()))e1=3247473589e2......
  • 计算网络之IPv6配置DHCP服务及acl
    一.DHCPv6服务DHCP即动态主机地址分配协议,在前面已经启动过IPv4的动态主机分配了,还是来介绍两种方式接口模式全局模式现在需要了解的就是DHCHv6,即基于IPv6的动态主机地址分配,它的分配是无状态模式和全状态模式接口模式指的是动态主机分配只在一个局域网段类,它只提供一个地......
  • Python绘制神经网络模型的结构示意图的方法
      本文介绍基于Python语言,对神经网络模型的结构进行可视化绘图的方法。  最近需要进行神经网络结构模型的可视化绘图工作。查阅多种方法后,看到很多方法都比较麻烦,例如单纯利用graphviz模块,就需要手动用DOT语言进行图片描述,比较花时间;最终,发现利用第三方的ann_visualizer模块,可......
  • 指针网络原理分析
    不明确的地方,请看原文:指针网络一些难理解的关键词combinatorialproblem(组合问题):组合问题的目标是在一组有限集合中找出能够同时满足一组约束的一个满意解,在本文的语境下,是指对于给定的词元输入序列,找出能够满足一组约束的词元输出序列,作为满意解。token(词元)在本文中,词元是......
  • 关于网络的一些疑问
    1.物理层,信号传输原理,信息传输率(比特率),带宽,码元传输率(波特率)。问题一:信号传输的时候,是模拟状态,还是数字状态?问题二:调制的时候,探测信号,是探测到用1表示,没探测到用0表示吗? 于是,我自己找了些资料1、信道模型的分类调制信道------模拟信道------调制器的输出端到解调器的输入......
  • 网络安全和隐私保护技术
    一、定义网络安全和隐私保护技术是指在互联网和其他网络环境中,通过技术手段保护网络系统、网络数据和用户隐私免于受到恶意攻击、非法访问、窃取或滥用。网络安全和隐私保护技术是保护网络安全和用户隐私的重要手段,是保障互联网和其他网络环境正常运作和用户权益的重要保障。二、发......
  • 网络文件共享服务
    存储类型:DAS:直连式存储NAS:网络附件存储——存储和管理空间都在远程SAN:存储区域网络——可以使用空间,管理也是你来管理双通道的协议:FTP端口号:20:传输权限元信息——命令通道21:实际数据——数据通道vsftpd/etc/vsftpd/vsftpd.conf如果你在网络共享服务中有上传的或者写的......
  • VM的网络端口转发
    VMvisualBox使用NAT模式的时候,可以设置端口转发规则,让局域网的其他电脑访问虚拟机。 点击端口转发,可以设置转发规则: 原理大概就是VM这个软件会在电脑主机上打开22222端口,并监听收到的数据,收到后就会转发到虚拟机的22端口。那么,我想要ssh10.0.2.15,则输入如下指令即可:ssh......
  • 神经网络中的量化与蒸馏
    前言 本文介绍了深度学习中精简模型的技术:量化和蒸馏。本文转载自DeepHubIMBA作者:Aadityaura仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【......
  • 思科认证 | CCNA(思科认证网络工程师)超全详解
    思科CCNA认证到底是什么,拥有思科CCNA认证能说明什么?01思科CCNACCNA思科认证是由网络领域著名的厂商--Cisco公司推出的。该公司针对其产品的网络规划和网络支持推出了工程师资格认证计划(CiscoCareerCertificationProgram,简称CCCP),并要求其在各国的代理拥有这样的工程师,以提高对......