网络流问题-Min-cut

文章目录

  • 1. 网络流问题基础
    • 1.1 概述
    • 1.2 常规算法
    • 1.3 总结
  • 2. Ford-Fulkerson Algorithm
    • 2.1 概述
    • 2.2 Ford 算法
    • 2.3 Ford 算法小结

链接:
B站学习视频

1. 网络流问题基础

1.1 概述

最大流问题主要是关于有向图问题。有向图中有m个边, n个节点,其中有一个节点为s[source],还有一个终点 t [sink],具体如下图所示:相当于从水源头s流向水槽,边上的数字表示水管边的最大容量。最大流的问题是在给定的容量情况下,就像给定如下图,如何计算这个图中每秒钟有多少水从起点s流向终点t.

  • 其实就是相当于在约束条件下求最大的值,也相当于约束条件下的优化问题
    在这里插入图片描述

1.2 常规算法

  • 初始化:定义原始图Original-Graph-即容量图,也定义一个残差图,初始化残差图Residual-Graph等于容量图。
    在这里插入图片描述

  • ·循环1· 在残差图中从起点s到终点t中找一个无回路的路径
    – 1.找路径 : s → v 2 → v 4 → t s\to v_2\to v_4\to t sv2v4t
    – 2.算瓶颈: 算出路径瓶颈x=2
    – 3.更参数:更新残差图参数 residual=residual - x
    – 4.删零边:删除此路径上权值为0 的边
    在这里插入图片描述

  • ·循环2· 在残差图中从起点s到终点t中找一个无回路的路径
    – 1.找路径 : s → v 1 → v 3 → t s\to v_1\to v_3\to t sv1v3t
    – 2.算瓶颈: 算出路径瓶颈x=2
    – 3.更参数:更新残差图参数 residual=residual-x
    – 4.删零边:删除此路径上权值为0 的边
    在这里插入图片描述

  • ·循环3· 在残差图中从起点s到终点t中找一个无回路的路径
    – 1.找路径 : s → v 1 → v 4 → t s\to v_1\to v_4\to t sv1v4t
    – 2.算瓶颈: 算出路径瓶颈x=1
    – 3.更参数:更新残差图参数 residual=residual-x
    – 4.删零边:删除此路径上权值为0 的边

在这里插入图片描述

  • 最终生成的残差图后无任何路径能够满足从s到t,即循环结束
  • 将原始容量图和残差结束图放在一起,更新为Flow Graph
    在这里插入图片描述
  • 计算总流量
    s = 3 + 2 = 5 ; t = 2 + 3 = 5 \begin{equation} s=3+2=5; t=2+3=5 \end{equation} s=3+2=5;t=2+3=5
  • 缺点:不一定会找到最大流,找到最大流取决于路径的先后顺序,这种方法会失败的,最后
  • 此时流量为4+0=4
    在这里插入图片描述
    在这里插入图片描述
  • 求得的是阻塞流
    在这里插入图片描述

1.3 总结

  • 最大流问题:
    – 输入:是一个有权重的有向图,里面有初始节点s[source], 最终节点t[sink]
    – 目标:在约定的管道承载能力下求从s到t最大的流速。
    – 限制: 每个管道边有承载能力限制,流向此边的流量不能超过承载能力
  • 常规算法:
    – 1. 创建一个初始的残差图,并使得残差图和容量图一样
    – 2. 循环:
    – 2.1 在残差图中从起点s到终点t中找一个无回路的路径
    – 2.2 在残差图路径上根据瓶颈x更新权重值 residual=residual-x
    – 2.3 在路径上删除权重为0 的边
    – 3. 不断循环直到残差图中无任何一个从s到t的路径
    – 4. 将容量图减去最后的残差图得到最后的流量图。计算流量
  • 缺点:
    – 1. 只能找到阻塞流[blocking flow]
    – 2. 输出的阻塞流不一定就是最大流

2. Ford-Fulkerson Algorithm

2.1 概述

Ford-Fulkerson Algorithm 和上面讲得算法的区别在于新增了一个回溯的路径,此算法有保障,一定能够找到最大流。常规算法不能反悔,一旦确定就不能返回,而ford可以新增回溯路径,可以把不好的路径撤销掉,所以一定能够找到最大的路径。

2.2 Ford 算法

  • 初始化:定义原始图Original-Graph-即容量图,也定义一个残差图,初始化残差图Residual-Graph等于容量图。
    在这里插入图片描述
  • ·循环1· 在残差图中从起点s到终点t中找一个无回路的路径
    – 1.找路径 : s → v 1 → v 4 → t s\to v_1\to v_4\to t sv1v4t
    – 2.算瓶颈: 算出路径瓶颈x=3
    – 3.更参数:更新残差图参数 residual=residual - x
    – 4.删零边:删除此路径上权值为0 的边
    – 5.加回溯:在此路径反方向上加回溯路径权重为x 的边

在这里插入图片描述

  • ·循环2· 在残差图中从起点s到终点t中找一个无回路的路径
    – 1.找路径 : s → v 1 → v 3 → t s\to v_1\to v_3\to t sv1v3t
    – 2.算瓶颈: 算出路径瓶颈x=1
    – 3.更参数:更新残差图参数 residual=residual - x
    – 4.删零边:删除此路径上权值为0 的边
    – 5.加回溯:在此路径反方向上加回溯路径权重为x 的边
    在这里插入图片描述
  • ·循环3· 在残差图中从起点s到终点t中找一个无回路的路径
    – 1.找路径 : s → v 2 → v 4 → v 1 → v 3 → t s\to v_2\to v_4\to v_1\to v_3\to t sv2v4v1v3t
    – 2.算瓶颈: 算出路径瓶颈x=1
    – 3.更参数:更新残差图参数 residual=residual - x
    – 4.删零边:删除此路径上权值为0 的边
    – 5.加回溯:在此路径反方向上加回溯路径权重为x 的边
    在这里插入图片描述
  • ·4· 在残差图中从起点s到终点t中无法找一个无回路的路径,循环结束
    -
  • ·5· 将最终的残差图和容量图对比,并去掉回溯路径:
    在这里插入图片描述
  • ford 算法一定会收敛,一定会找到最大流,最差的循环次数为最大流的大小。

2.3 Ford 算法小结

  • 常规算法:
    – 1. 创建一个初始的残差图,并使得残差图和容量图一样
    – 2. 循环:
    – 2.1 在残差图中从起点s到终点t中找一个无回路的路径
    – 2.2 在残差图路径上根据瓶颈x更新权重值 residual=residual-x
    – 2.3 在路径上删除权重为0 的边
    – 2.4 在此路径上新增一个回溯路径,所有的路径权重为x
    – 3. 不断循环直到残差图中无任何一个从s到t的路径
    – 4. 将得到的残差图去除到回溯路径为最终的残差图
    – 5. 将容量图减去最后的残差图得到最后的流量图。计算流量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么用PPT录制微课?详细步骤解析!

随着信息技术的不断发展,微课作为一种新型的教学形式,因其短小精悍、针对性强等特点,在教育领域得到了广泛的应用。而PPT作为一款常用的演示工具,不仅可以用来制作课件,还可以利用其内置的录屏功能或结合专业的录屏软件…

Dify中的经济索引模式实现过程

当索引模式为经济时,使用离线的向量引擎、关键词索引等方式,降低了准确度但无需花费 Token。 一.提取函数**_extract** 根据不同文档类型进行内容的提取: def _extract(self, index_processor: BaseIndexProcessor, dataset_document: Data…

FastAPI 学习之路(四十三)路径操作的高级配置

在实际开发中,可能我们有些接口不能在接口文档中与其他业务接口一样开放给前端或者其他对接人,那么我们肯定会想着在接口文档中对其进行屏蔽隐藏操作,那么可以实现吗? 接口文档中隐藏接口 当然,还很简单,…

【CSS in Depth 2 精译】2.6 CSS 自定义属性(即 CSS 变量)+ 2.7 本章小结

文章目录 2.6 自定义属性(即 CSS 变量)2.6.1 动态变更自定义属性 2.7 本章小结 当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性 …

PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南

小编特将PostgreSQL证书申报个税退税流程,编辑成文,供大家申报参考哦~ 1.申报专项附加扣除 第一步:打开个人所得税APP,选择“专项附加扣除填报”: 第二步:“扣除年度”选择您要申报的年度,并…

Windows 默认以管理员运行打开CMD

winr 默认以管理员打开运行CMD 需求:在运行页面输入cmd 希望是可以直接通过管理员方式打开的。 winr 打开运行 输入secpol.msc 打开本地安全策略(注意家庭版是没有这个的) 找到本地策略–安全选项–用户帐户控制: 以管理员批准模式运行所有管…

基于Python thinker GUI界面的股票评论数据及投资者情绪分析设计与实现

1.绪论 1.1背景介绍 Python 的 Tkinter 库提供了创建用户界面的工具,可以用来构建股票评论数据及投资者情绪分析的图形用户界面(GUI)。通过该界面,用户可以输入股票评论数据,然后通过情感分析等技术对评论进行情绪分析…

JavaScript 中 await 永远不会 resolve 的 Promise 会导致内存泄露吗?

前言 在 JavaScript 中,await 关键字用于等待一个 Promise 完成,它只能在异步函数(async function)内部使用。当 await 一个永远不会 resolve 的 Promise 时,它确实会阻塞异步函数的进一步执行,但不会直接…

C1W1.Assignment: Logistic Regression

理论课:C1W1.Sentiment Analysis with Logistic Regression 文章目录 前期准备导入包导入数据处理推文文本 Part 1: Logistic regressionPart 1.1: Sigmoid实现 sigmoid 函数Logistic regression: regression and a sigmoid Part 1.2 Cost function and GradientUp…

Python 使用proto 发送socket数据

import socket import binascii import struct from SensingMonitoring_pb2 import Command, CommandNamesif __name__ "__main__":client socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.connect(("192.168.1.100", 22295))# 发送数据comman…

软件模块的初始化

什么是初始化? 软件的初始化(Initialization)是指软件启动或重新配置时执行的一系列步骤和过程,旨在准备软件运行环境、加载必要的配置信息、检查系统依赖项、分配资源(如内存、文件句柄等),以及…

5、Hacker_Kid-v1.0.1

中等难度 目标root权限 先进行一波IP地址发现 netdiscover -i eth0 -r 192.168.1.1/24 发现存在的靶机ip 进行一波端口的探测 发现是一个apache的服务和一个tornado的网站 这里有个细节部分,53端口常见的情况都是走的udp协议做的域名解析,这里查询出来…

【ARM】CCI缓存一致性整理

目录 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置​编辑 3.CCI500内部结构​编辑 4.功能描述 1.CCI500提供的功能 2.CCI500在SOC系统中所处的位置 3.CCI500内部结构 Transaction Tracker(TT)是用来解决一致性和ordering问题的,它…

完成SSH连接与端口映射并运行hello_world.py以及创建conda环境

完成SSH连接与端口映射并运行hello_world.py 第一步: 使用vscode打开连接开发机如图 第二步: 端口映射 ssh -p 37367 rootssh.intern-ai.org.cn -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyCheckingno 如: ssh -…

优化静止不动的GPS点(JS版)

1.理论依据: 连续的GPS点中,静止不动的一段或者多段这样的点序列。把这些点序列处理成一个点,也就是拿这些序列的第一个点即可。理论依据如下:从第二个点开始,每个点都和第一个点进行距离计算和比较。至少比较N个点。当百分之M的…

Win11任务栏当中对 STM32CubeMX 的堆叠问题

当打开多个 CubeMX 程序的时候,Win11 自动将其进行了堆叠,这时候就无法进行预览与打开。 问题分析:大部分ST的工具都是基于 JDK 来进行开发的,Win11 将其识别成了同一个 Binary 但是实际上他们并不是同一个,通过配置…

redis源码分析之底层数据结构(一)-动态字符串sds

1.绪论 我们知道redis是由c语言实现的,c语言中是自带字符串的,但是为什么redis还要再实现自己的动态字符串呢,这种动态字符串的底层数据结构是怎样的呢?接下来我们带着这些问题来看一看redis中的动态字符串sds。 2.sds的组成 struct __at…

pico+unity3d项目配置

重点:unity编辑器版本要和pico的sdk要求一致、比如: 对于 Unity 2022.1.14 及以上版本,若同时在项目中使用 URP、Linear 色彩空间、四倍抗锯齿和OpenGL,会出现崩溃。该问题待 Unity 引擎解决。对于 Unity 2022,若同时…

多个版本JAVA切换(学习笔记)

多个版本JAVA切换 很多时候,我们电脑上会安装多个版本的java版本,java8,java11,java17等等,这时候如果想要切换java的版本,可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…