网络流中最大流和最小割算法
学习顺序按照下图的改进历程
问题转化:寻找初始解,提升,达到条件停止
求解优化,加回溯边,画残差图,在残差图中寻找一条s可到t的路径
看最大流最小割问题,证明 除 ST外每个点的出度和入度相等,S和T两点出入度差为最大流f
根据图列线性规划
从对偶问题中理解FF算法
对偶问题转化:
转化后
变成对偶后还没有结束,还可以简化
(第一步中四者因为是最小割,图被切为两部分,S和T必然在两边,则二者之一不起作用,假设ys=0)
此时还有不等式,我们看345三个约束,
先科普一下,若A的任意子方阵的行列式等于0,1,-1,则称A为全单模矩阵。由定义容易得到全单模矩阵的元素只有0,-1,1。
345约束的系数矩阵为全单模矩阵,因此证明这个线性规划的解必然是整数点。
这样的FF算法有明显的缺陷,
Dinitz的提升
这样的提升还不够,于是有
EK算法
由于时间复杂度一直太高,所以最大流问题一直被寻求新方法,接下来就是
著名的dinic算法
首先学会构建-Layered-Network(Gf )
尝试构建一下
由于最右上角的点使得S到T不可达,删除
结果是
下一步:寻找
blocking flow
其实你会发现删除不可达的节点在寻找blocking的时候就做了
结果最大流算法变成
到此学习结束,但是发现没有回忆起来曾经学的最大流最小割,,,,,
还有费用问题
呜呜
又看了一会儿得出一些最小割做题理解
对于上边看的对偶问题
当最大流对偶成最小割时候,也就是整数规划,那么可以用线性规划方法很快解出来。
那么这和最小割有什么关系呢?
打开我的matlab。。。。。
clc;clear;
f = [0, 0, 2, 1, 3, 2, 1];
intcon = [1, 2, 3, 4, 5, 6, 7];
A = [-1, 1, 0, 0, -1, 0, 0; -1, 0, 0, 0, 0, -1, 0; 0, -1, 0, 0, 0, 0, -1];
b = [0; -1; -1];
Aeq = [-1, 0, 1, 0, 0, 0, 0;0, -1, 0, 1, 0, 0, 0];
beq = [0; 0];
lb = zeros(7,1);
ub = [1;1;1;1;1;1;1]; % Enforces x(3) is binary
[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);
disp(x);
算完了发现结果是
也就是yu=1,yv=1,z1=1,z2=1,对着图看一下
发现最小割,确实就是红线指的那个,最小割也就是3.
说了这么多,我自己会不会算整数规划呢?手算一下试试
首先内点法肯定是不错的方法,可惜手推麻烦,画图又不会。。。。
那么还是先看个例子吧
对于这个问题,直接LP,求得解不满足x1,x2,x3试试整数,由于x1=1.25,那么向上向下各取一个整数边界,即小于等于1和大于等于2,
问题转化
发现P1的结果已经满足x1为整数, 继续转化,其中因为是最小化,如果向上向下都有解,那么选择小的,结果如下
P5时满足条件,则求解完成。
虽然我们这里变量都是0-1变量不过不影响,只是确定的更快而已,那就是如何手撕LP了,选择单纯形法最多用了,试试
只算了一次,还需要迭代,不保证算对。。。但是感觉没算错,有意者参考单纯形法实例
最大流和最小割的转化就是哪个好算用哪个,而最小割一般就是中间两排节点之间的度为INF,这时候也就只能割S到第一排或者第二排到T。
而中间两排节点之间度怎么理解,我觉得就是你吧一个问题转化为网络流问题时,若是存在不可分割的东西,就想象用最小割,而它们之间的边的度就是INF。
例如
这里最明显的就是相邻的必须有一个
其他例子
边的终点必须是被选节点中的点,那么点和边就不可分割了。
画图如下:
网络流中最大流和最小割算法相关推荐
- 网络流:最大流,最小割 基本概念及算法
原文:http://www.cnblogs.com/Booble/archive/2011/03/04/1970453.html 参考:http://community.topcoder.com/tc ...
- 网络流之最大流和最小割
最大流问题 最大流:给定有向图中每条边的最大流量(容量),求从源点到汇点的最大流量. 容量网络: 括号左边代表容量,右边代表流量. 残留网络:流网络中剩余可增加的流量 增广路:满足容量条件的一条流量不 ...
- 网络流——最大流和最小割
最小割问题 ststst割:将节点划分为A,BA,BA,B两个集合,其中源节点s∈As\in As∈A且宿节点t∈Bt\in Bt∈B ststst割的容量:由集合AAA到集合BBB所有出边容量之和. ...
- 最大流与最小割(Maxflow与Mincut)
传统图像主要分割算法: 基于阈值的分割 (1)固定阈值分割 (2)直方图双峰法 (3)迭代阈值图像分割 (4)自适应阈值图像分割 (5)最佳阈值法 2.基于边缘的分割 (1)Canny边缘检测器 (2 ...
- 如何快速理解最大流和最小割
摘要: 割从哪来-------->最大流和最小割之间的等价关系的阐述. 1.问题引入 1.1思考这样一个问题:在给定的图中,如何判断一个源点s到终点t是否有路径存在呢? 我们首先想到的是用BFS ...
- 【图割】最大流/最小割算法详解(Yuri Boykov and Vladimir Kolmogorov,2004 )
本博客主要翻译了Yuri Boykov and Vladimir Kolmogorov在2004年发表的改进最大流最小割算法用于计算机视觉的论文:An Experimental Comparison ...
- 最大流最小割经典例题_算法: 最大流与最小割
什么是最大流 最大流要解决的问题是从 S 到 T 怎么才能最大地将数据运到另一边.这个"数据"可以是水,或者网络数据包.举个例子 在上面这个图中将数据从 S 运到 T,其中边的权值 ...
- 最大流,最小割刷题记录
T1 P2057 [SHOI2007] 善意的投票 题目 https://www.luogu.com.cn/blog/OnMyOwn/OnMyOwn https://www.luogu.com.cn/ ...
- BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 23822 Solved: 6012 [Submit ...
最新文章
- 看完就忘!看完就忘!我感觉我要废了
- python绘制柱状图,如何改变柱状柱间距,如何设置横纵轴标签(绘制Intel Realsense D435深度误差柱状图)
- jvm系列(九):如何优化Java GC「译
- 电脑磁盘空间不足怎么办_Mac磁盘总是提示空间不足?学会这几招,瞬间腾出几个G...
- 查看Linux下端口被哪个程序占用
- 视频教程-程序员面试宝典——助你拿到好offer-招聘/面试
- 【导航算法】无人机路径跟踪L1导航算法
- c语言自定义函数运用,C语言自定义函数(图文详解)
- 蓝桥ROS机器人之51单片机C代码编译和下载
- 如何办理杭州市民卡|非杭户籍人员个人申领流程
- 网络跳线接续的四种方法
- 文本标注工具-brat安装
- Maven的下载与配置 和在IDEA中创建Maven的项目
- gitlab镜像仓库设置及自动同步代码到服务器实现方式
- NFT Insider #62:The Sandbox宣布与狮门影业达成合作,红杉资本继续扩大Web3领域投资
- Latex引用参考文献的5种方式
- 安装和卸载.deb包
- 笔记本电脑锁屏密码能输入,但解锁后键盘不好用
- python 查找字符串
- Android 默认按键音开关