学习这个算法是为学习图像处理中的图割算法做准备的。

基本概念:

1.最大流是一个有向图。

2.一个流是最大流,当且仅当它的残余网络中不包括增广路径。

3.最小割就是网络中所有割中值最小的那个割,最小割是不唯一的,不过最小割的值是唯一的。

4.最大流的流量等于某一最小割的容量。

算法思想就是Ford-Fulkerson方法。

具体流程:

1.首先使用广度优先搜索找到源节点到汇节点的一条路径,为增广路径。

2.如果找不到新的从源到汇的增广路径,则上一次求得的网络就是最大流,否则向下执行。

3.找出增广路径中最小的路径的值。

5.用路径中最小的值构造最大流网络,原网络包含这个网络。

4.将增广路径中所有的路径减去最小路径这个值,形成新的网络图。

6.对新的网络图继续执行第1步。

网络图如下,没什么好办法形象表示。我比较懒,不想画图了,真想看明白过程就看算法导论405页。

原网络:

最大流:

matlab代码如下:

clear all;close all;clc

%初始化邻接压缩表,算法导论405页的图

b=[1 2 16;1 4 13;2 3 12;2 4 10;3 4 9;3 6 20;4 2 4;4 5 14;5 3 7;5 6 4];

m=max(max(b(:,1:2))); %压缩表中最大值就是邻接矩阵的宽与高

A=compresstable2matrix(b); %从邻接压缩表构造图的矩阵表示

netplot(A,1);

maxflow=zeros(m,m);while 1%下面用广度优先搜索找增广路径

flag=[]; %相当于closed表,已访问过的节点

flag=[flag 1];

head=1;

tail=1;

queue=[]; %队列,相当于open表,将要访问的节点

queue(head)=1;

head=head+1;

pa=zeros(1,m); %每个节点的前趋

pa(1)=1; %源节点前趋是自己while tail~=head %广度优先搜索,具体细节就不注释了

i=queue(tail);for j=1:mif A(i,j)>0 && isempty(find(flag==j,1))

queue(head)=j;

head=head+1;

flag=[flag j];

pa(j)=i;end

endtail=tail+1;end

if pa(m)==0%如果搜索不到汇节点,退出循环break;endpath=[];

i=m; %从汇节点开始

k=0; %路径包含的边的个数while i~=1%使用前趋构造从源节点到汇节点的路径

path=[path;pa(i) i A(pa(i),i)]; %存入路径

i=pa(i); %使用前趋表反向搜寻,借鉴Dijsktra中的松弛方法

k=k+1;endMi=min(path(:,3)); %寻找增广路径中最小的那条边for i=1:k

A(path(i,1),path(i,2))=A(path(i,1),path(i,2))-Mi; %增广路径中每条路径减去最小的边

maxflow(path(i,1),path(i,2))=maxflow(path(i,1),path(i,2))+Mi; %最大流,原网络包含这个网络,我只能这样表示了end%使用新的图A进入下一循环,从新开始找增广路径endfigure;

netplot(maxflow,1)

这里没有连通的路径值为0.

最小割最大流算法matlab,matlab练习程序(最大流/最小割)相关推荐

  1. matlab最小费用最大流函数,最小费用最大流算法通用Matlab程序

    下面的最小费用最大流算法采用的是"基于Floyd最短路算法的Ford和Fulkerson迭加算法",其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确 ...

  2. 限流算法-常见的4种限流算法

    首先我们先来看看什么是限流? 限流是指在系统面临高并发.大流量请求的情况下,限制新的流量对系统的访问,从而保证系统服务的安全性. 另一种解释:在计算机网络中,限流就是控制网络接口发送或接收请求的速率, ...

  3. 最大流算法的Matlab实现

    这学期在上<运筹与优化>这门课,这周上机作业是用Matlab实现最大流算法,用BFS搜索算法遍历迭代. 算法原理请自行百度,以下为代码: clear all; close all; clc ...

  4. Redis(六)——限流算法:滑动时间窗口限流和漏斗限流

    本文主要总结自<redis深度历险> 限流的意义 限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子.限流可以保证系 ...

  5. matlab最小费用最大流函数,Matlab最小费用最大流算法通用程序

    下面的最小费用最大流算法采用的是"基于Floyd最短路算法的Ford和Fulkerson迭加算法",其基本思路为:把各条弧上单位流量的费用看成某种长度,用Floyd求最短路的方法确 ...

  6. mcra matlab,噪声估计的算法及matlab实现毕业设计

    噪声估计的算法及matlab实现毕业设计 (53页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 I噪声估计的算法及MATLAB实现毕业设计 ...

  7. 【限流02】限流算法实战篇 - 手撸一个单机版Http接口通用限流框架

    本文将从需求的背景.需求分析.框架设计.框架实现几个层面一步一步去实现一个单机版的Http接口通用限流框架. 一.限流框架分析 1.需求背景 微服务系统中,我们开发的接口可能会提供给很多不同的系统去调 ...

  8. 【限流01】限流算法理论篇

    微服务就是将复杂的大应用拆分成小的应用,这样做的好处是各个应用之间独立开发.测试.上线,互不影响.但是服务拆分之后,带来的问题也很多,我们需要保障微服务的正常运行,就需要进行服务治理.常用手段有:鉴权 ...

  9. 什么是限流?为什么会限流呢?常见的限流算法【固定窗口限流、滑动窗口限流、漏桶限流、令牌桶限流】是什么呢?

    什么是限流?为什么会限流呢?常见的限流算法[固定窗口限流.滑动窗口限流.漏桶限流.令牌桶限流]是什么呢? 什么是限流? 为什么会限流? 1. 固定窗口限流算法 1.1 什么是固定窗口限流算法 1.2 ...

  10. 打开计算机无法最小化,软件一打开就最小化到任务栏怎么办_电脑打开程序它就最小化的解决方法...

    最近有朋友问小编软件一打开就最小化到任务栏怎么办的问题,为什么电脑打开软件自己变成最小化呢?其实有很多朋友都遇到过软件打开直接最小化打不开了的问题,那么窗口一直最小化打不开的解决方法是什么呢?别着急, ...

最新文章

  1. ps aux详解(进程状态说明)
  2. 阿里云Redis集群版简要介绍
  3. 鸿蒙51单片机,基于C51系列单片机的交通控制系统设计
  4. 训练效率低?GPU利用率上不去?快来看看别人家的tricks吧~
  5. C++期末实践程序设计与数组作为参数的注意事项
  6. 最困难的是带着自己的选择生活下去
  7. 李彦宏告诫年轻人:向前看两年
  8. 【Gulimall+】免费白嫖内网穿透:小米球ngrok
  9. emule应用及原理(转载)
  10. System.Data.SqlClient.SqlException: 用户'opper\ASPNET' 登录失败的解决办法!
  11. 拳皇世界6月13服务器维护,拳皇世界闪退怎么办 对症下药马上好
  12. android killer 连接模拟器,AndroidKiller怎么连接夜游神手机模拟器的方法教程
  13. 计算机及相关经典书籍收集
  14. 2021直播电商下半场,“网易严选们”为何成主播良港?
  15. 在 Kubernetes 中基于 StatefulSet 部署 MySQL(下)
  16. 企业CIO如何做好软件资产管理及优化
  17. 如何做好大数据监测和舆情案例分析工作的办法
  18. Maven之查找依赖信息的网站
  19. python读取串口数据 绘图_使用Python串口实时显示数据并绘图的例子
  20. 谈谈:高端网站定制开发的流程和步骤有哪些?

热门文章

  1. 使用powershell命令,为exchange 2007用户配置邮箱数据
  2. Java多线程篇之List与Collections集合工具类
  3. androidru使用adb启动activity和monkeyrunner启动activity
  4. android HandlerThread源码解析
  5. android camera 竖直拍照 获取竖直方向照片 做缩放处理
  6. [2018.03.13 T2] 过河(river)
  7. Oracle的imp、exp导入导出命令
  8. 二年级计算机考试题,二年级计算机笔测试题(XX-XX第一学期
  9. mysql数据库rpm包安装_Linux rpm包安装MySQL数据库问题总结
  10. pythonsuper多重继承_解决python super()调用多重继承函数的问题