网络流问题-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 学习之路(四十三)路径操作的高级配置

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

Java泛型之协变与逆变

Java中的泛型有两个重要特性:不可变性(invariance)和类型擦除(type erasure)。这两个概念在理解和使用泛型时非常重要。以下是对这两个特性的详细解释: 不可变性(Invariance) 在Ja…

【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 自定义属性 …

SunnyUI中UIAvatar的使用

在SunnyUI控件库中,UIAvatar 控件是用来显示头像或图标的小部件,通常用于用户界面中代表用户或角色的图像。下面是如何在你的应用程序中使用 UIAvatar 的步骤: 1. 引入 SunnyUI 控件库 确保你的项目已经包含了 SunnyUI 控件库。如果是通过 …

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

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

Python input NameError: name ‘xxx‘ is not defined.

chiami.py name input("Come ti chiami?")type(name) print(name) $ python chimi.py Come ti chimi? xxx Traceback (most recent call last): File "chimi.py", line 1, in <module> name input("Come ti chiami?") …

script标签type属性

script标签中的type的使用 type MDN&#xff1a;该属性定义script标签元素包含或src应用的脚本语言&#xff0c;属性的值为MINE类型&#xff0c;也叫媒体类型。支持的为text/javascript,application/javascript,text/ecmascript,application/ecmascript,application/json,mod…

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

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

【网络编程】select函数

select的优点是跨平台的&#xff0c;缺点是因为是轮询查询的&#xff0c;相对效率不高 使用 select 同时监听多个文件描述符, 将监控的操作交给内核去处理&#xff0c;当有监控操作时返回。select可以完成一个进程对多个客户端的处理 #include <sys/select.h> #include…

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

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

前端数据加密方式

1、Base64加密 一、原生加解密 const btoa window.btoa(123) // 编码console.log(加密后,btoa)const atob window.atob(bota) // 解码console.log(解密后,atob) 二、base64插件 npm install --save js-base64 <script lang"ts"> import { defineCompon…

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

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

Matlab中产生高斯白噪声信号的方法和其功率计算

Matlab中产生高斯白噪声信号的方法和其功率计算 matlab中计算信号能量&#xff1a; p o w e r ∑ n 1 N x 2 ( n ) power \sum_{n1}^Nx^2(n) powern1∑N​x2(n) ​ 功率为 P 1 N ∑ n 1 N x 2 ( n ) P \frac{1}{N}\sqrt{\sum_{n1}^Nx^2(n)} PN1​n1∑N​x2(n) ​ 对应ma…

C1W1.Assignment: Logistic Regression

理论课&#xff1a;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…

软件模块的初始化

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

Microsoft Build 2024 推出 .NET 9:Tensor<T>、 OpenAI Collaboration和.NET Aspire

在 Microsoft Build 2024 上&#xff0c;.NET 9 4 发布&#xff0c;引入了用于深度学习的 Tensor 类型以及与 OpenAI Collaboration实现GPT4o和Assistants v2等功能。这些最新改进还带来了 .NET Aspire&#xff0c;简化了云原生应用开发。更新涵盖 ASP.NET Core、Blazor 和 .NE…