博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[学习笔记]上下界网络流
阅读量:6379 次
发布时间:2019-06-23

本文共 1270 字,大约阅读时间需要 4 分钟。

有的时候,网络流建模要考虑某些边必须选择若干次,又不能多于若干次,而且不太容易转化成比较好的限制模型,

就简单粗暴地给每条边定一个流量的上下界,求在满足上下界的基础上的一些问题。

大概有以下几种。

基本思路都是先满足下界,再调整流量守恒,一边满足最优性。

 

无源汇上下界可行流

每条边的流量有上下界

问是否存在一种可行方案

 

首先我们要保证每个点的流入流量等于流出流量

如果存在一个可行流,那么一定满足每条边的流量都大于等于流量的下限.因此我们可以令每条边的流量等于流量下限,得到一个初始流,然后建出这个流的残量网络,每条边的流量等于上限减下限。
但现在可能流量不是守恒的,让t[i]=流入量-流出量
我们建出虚拟的源点和汇点,如果t[i]>0,源点向i连t[i]的边,否则i点向汇点连-t[i]的边,看是否满流即可

 

注意,把下界干掉时,不是真的流过去,反向边不用动。因为这里不能反悔。

 

有源汇上下界可行流

T到S连一条inf的边e。然后同上。

设e的最终流量是w,则原图的可行流就是w

证明:

S,T本身没有入边、出边,那么e的流量就是S流出的,流到T的流量。

拆掉这个边,每个边流量加上下界

由于剩下的图中,满足流量守恒和上下界,那么一定是一个合法的网络流流量分配,那么S流出的流量w就是总流量

 

无源汇上下界最小费用可行流

干掉下界的时候,把费用先计算上。

把超级源超级汇求最大流的一步,换成最小费用最大流即可。

即满足合法的前提下,最小化费用。

费用就是之前的费用加上这次的费用。

例题:

 

有源汇上下界最小费用可行流

t到s是(inf,0)的边。

同上。

 

有源汇上下界(最小费用)最大流

先求可行流

现在流量已经守恒了。

拆掉t到s的边

残量网络上求s到t的最大流即可。

因为最大流过程一定满足流量守恒,所以依然合法。所以求可行流的反向边流量可以保留,支持反悔。

最大流=可行流+s到t的增加的最大流

 

如果涉及最小费用,把所有的最大流换成最小费用最大流即可。

记得统计三次费用。

 

有源汇上下界(最小费用)最小流

两种方法。

第一种:

直接类比上面的 有源汇上下界(最小费用)最大流

理解一下反边,就是反悔。

t到s的最大流,就是s到t能减少的最多的流量。

所以最后一步,求t到s的最大流。

最小流=可行流-t到s的最大流。

 

第二种:(并不如第一个好理解)

类似 <有源汇上下界可行流> 的构图方法,但是不添加T到S的边,求一次超级源到超级汇的最大流。

加边(T,S,0,+∞),在上一步残量网络基础上再求一次超级源到超级汇的最大流。
流经T到S的边的流量就是最小流的值。

该算法的思想是在第一步中尽可能填充循环流,以减小最小流的代价。

第二步最大流为了保证合法性。

其实相当于,第一步先占据一些循环流,然后再跑完第二个最大流之后,删掉t到s的边,对于一些第一步构成的循环流,删掉。

观察现在实际的图流量分配,就是最小流了。

 

例题:

 

转载于:https://www.cnblogs.com/Miracevin/p/10132570.html

你可能感兴趣的文章
DedeCMS操作基础(一)
查看>>
实现MySQL允许远程连接
查看>>
Java Outputstream to String
查看>>
RS232C串口通信接线方法(三线制)
查看>>
Android 自定义View属性相关细节
查看>>
type already defined error in Eclipse
查看>>
OSA 安装
查看>>
先安装.Framework然后再安装IIS,ASP.NET程序不能运行
查看>>
NPOI Excel下拉项生成设置
查看>>
360该不该拍?
查看>>
用Xib创建控制器
查看>>
oracle的sqlplus和dos的中文乱码问题
查看>>
LVS+keepalived高可用负载均衡集群部署(二)---LAMP网站服务器与LVS服务器
查看>>
Struts2之简单数据类型转换
查看>>
python 打印数字
查看>>
iptables规则的查看、添加、删除和修改
查看>>
打开网站显示输入用户名和密码
查看>>
size_t的32位和64位兼容
查看>>
HBase全分布式模式的安装和配置
查看>>
Spring 框架的设计理念与设计模式分析
查看>>