首页 > 其他分享 >最大流

最大流

时间:2023-12-27 14:56:55浏览次数:16  
标签:结点 最大 增广 sum 路径 网络

最大流

引用自《算法导论》第26章 最大流

简介:
正如可以将道路交通图模型化为有向图来找到从一个城市到另一个城市之间的最短路径,我们也可以将一个有向图看作是一个“流网络”并使用它来回答关于物料流动方面的问题。

目录

流网络

  1. 流网络和流
    流网络 \(G=(V,E)\) 是一个有向图,图中每条边 \((u,v)\in E\)有一个非负的容量值 \(c(u,v)\ge 0\) ,且如果边集合 \(E\) 包含一条边 \((u,v)\) 则不存在反方向的边 \((v,u)\) 。则为方便起见,定义 \(c(v,u)=0\),而在所有结点中,我们分辨出两个特殊结点:源结点 \(s\)汇点 \(t\),于是对于每个结点 $ v\in V$ 流网络都包含一条路径 \(s-v-t\)
    :$$|f|=\sum_{v\in V}f(s,v)-\sum_{v\in V}f(v,s) $$
    容量限制:对于所有的结点 \(u,v\in V\),要求 \(0\le f(u,v) \le c(u,v)\)。
    流量守恒:对于所有的结点 \(u\in V-\lbrace s,t\rbrace\),要求:$$\sum_{v\in V}f(v,u)=\sum_{v\in V}f(u,v)$$
  2. 流的一个例子:

    a 图为一开始的容量图,箭头上的数字代表容量; b 图为取最大流时的流网络图,此处的 / 仅起到区分流和容量的作用

Ford-Fulkerson 方法

  1. 残存网络&增广路径

    左图即为按照 b 图绘制的残存网络,而标红的则是其一条增广路径,在这里我们不难发现右图中从 s 到 t 已经没有增广路径了,而此时的流即为最大流
    残存网络 \(G_f\) 由那些仍有空间对流量进行调整的边构成
    增广路径 \(p\) 是残存网络 \(G_f\) 中一条从源结点到汇点的简单路径

  2. 基本的 Ford-Fulkerson算法
    伪代码描述如下
    1 对于 每一条边\((u,v)\in G,E\)
    2   \((u,v).f=0\)
    3 每当 在残存网络 \(G_f\) 中存在一条从 \(s\) 到 \(t\) 的增广路径 \(p\)
    4   \(c_f(p)\)=min\(\lbrace c_f(u,v):(u,v)\) is in \(p \rbrace\)
    5   对于 每一条增广路径 \(p\) 中的边 \((u,v)\)
    6     如果 \((u,v)\in E\)
    7       \((u,v).f\)=\((u,v).f+c_f(p)\)
    8     否则\((u,v).f\)=\((u,v).f-c_f(p)\)
    对于=for 每当=while

  3. Edmonds-Karp算法
    即在寻找增广路径时使用广度优先搜索来改善算法效率

最大二分匹配


这样的一个图中,我们要将左边结点与右边结点匹配,且一个左结点只能匹配一个右节点,怎么找出最大匹配数?
将这个问题转化为最大流问题,则得到最大流为3,如图所示:

(未完待续)

标签:结点,最大,增广,sum,路径,网络
From: https://www.cnblogs.com/Allergy/p/17930555.html

相关文章

  • “自适应特征强化与转导信息最大化的iDNA-ABT深度学习模型:新一代DNA甲基化检测工具”
    iDNA-ABT:advanceddeeplearningmodelfordetectingDNAmethylationwithadaptivefeaturesandtransductiveinformationmaximization会议地点:腾讯会议关键词:作者:期刊:Bioinformatics年份:2022论文原文:补充材料:报告人博客链接:https://blog.csdn.net/qq_48480183/article/de......
  • Runway官宣下场通用世界模型!解决视频AI最大难题,竟靠AI模拟世界?
    前言 Runway突然发布公告,宣称要开发通用世界模型,解决AI视频最大难题,未来要用AI模拟世界。本文转载自新智元仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全......
  • 腾讯QQ9正式发布!4年来最大更新 安卓/iOS/Windows都能下载了
    12月20日消息,今日,腾讯宣布,QQ9正式上线。距离上一次QQ8版本已经过去了4年。据官方介绍,本次版本更新,QQ9采用了全新的QQNT技术架构驱动,性能升级,交互体验更加流畅。全新界面,流畅社交。首先是UI界面全面优化,QQ启动页、登录页、消息列表页、关于页等页面UI焕彩上线。同时,聊天、设置界面顶......
  • 【flink番外篇】6、flink的WaterMark(介绍、基本使用、kafka的水印以及超出最大允许延
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • Python算法——树的最大深度和最小深度
    Python中的树的最大深度和最小深度算法详解树的最大深度和最小深度是树结构中的两个关键指标,它们分别表示树的从根节点到最深叶子节点的最大路径长度和最小路径长度。在本文中,我们将深入讨论如何计算树的最大深度和最小深度,并提供Python代码实现。我们将详细说明算法的原理和步骤。......
  • 代码随想录算法训练营第二天 | 239. 滑动窗口最大值,347.前 K 个高频元素
    一、239.滑动窗口最大值题目链接:LeetCode239.滑动窗口最大值学习前:思路:无学习后:自定义双端队列,实现push、pop、peek方法,使得队列单调非增。peek方法不变;当入队时,若当前元素比队尾元素大,则pop队尾,直到队列为空或当前元素不大于队尾元素;当出队时,若队列非空且队首元素和窗......
  • 网络最大流
    关于vector存图很多网上的资料(视频、题解)的最大流算法为了方便找反边,都使用了链式前向星。但是!vector党表示不服!于是在进行学习后,笔者归纳出了两种vector存图并快速找反边的方法。存储反边编号一般vector实现邻接表是形如这样的:(在最大流相关算法中)structedge{ in......
  • 输入若干个数,求最大、最小、平均值
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ intarr[10]; intmax=0; intmin=0; intsum=0; printf("请输入十个数\n"); for(inti=0;i<10;i++) { scanf("%d",&arr[i]); } for(inti=0;i&......
  • [LeetCode Hot 100] LeetCode84. 柱状图中最大的矩形
    题目描述思路:枚举+优化(单调栈)先固定矩阵的高。然后向左向右找到第一个比当前元素值小的元素,确定好左右边界。对于元素2来说:向左找到第一个比当前元素值小的元素:1的右边界向右找到第一个比当前元素值小的元素:3的右边界枚举每个元素的上边界,确定往左数最远到达哪个边界......
  • 最大公共子图(MCS)的大小、子图编辑距离和嵌入距离
    最大公共子图(MCS)的大小、子图编辑距离和嵌入距离是图匹配和图相似性度量中的常见概念,它们用于比较两个图之间的相似性。以下是它们的定义:最大公共子图(MCS)的大小:定义:最大公共子图是两个图中具有相同结构的最大子图。即,在两个图中找到一个共同的子图,使得这个子图不能再扩展,即......