热门标签 | HotTags
当前位置:  开发笔记 > 开放平台 > 正文

网络流解析——最大流EdmondsKarp算法

原理并不复杂,但存在的疑惑主要集中在反向边的引入,以下篇幅作以讲解。首先假设一不存在TS边的单源有向加权图。(所谓“TS边”即是指对于任一割,方向为

原理并不复杂,但存在的疑惑主要集中在反向边的引入,以下篇幅作以讲解。
首先假设一不存在TS边的单源有向加权图。
(所谓“TS边”即是指对于任一割,方向为T->S的边)
类似下图(1为S,6为T,边权(容量)均为10)
这里写图片描述
此时若求解最大流问题(具体命题省略),按照EdmondsKarp算法,作出其残量网络。
为了解释反向边的作用,我们考虑不使用反向边的情况下,所得出的结果。
下图为不包含反向边的残量网络。
这里写图片描述
每条原始图的边流量初始化为0,相应残量则为10。
如此只要我们对于每条增广路(连接S与T的路)进行增广(将增广路的流量灌到最大限度),最后所有增广路灌流量相加即为最大流结果。
以上都十分直观。
引入割的概念
割:通俗理解,一个图或网络的割,表示一个切面或切线,将图或网络分为分别包含源点和漏点的两个子集,该切线或切面与网络相交的楞或边的集合,称为图像的割。(百度百科)
注意,其中不包含T->S边。
由定义,割其实是 Σ cap,而一定有 Σ flow<= Σ cap
这里写图片描述
由图可知,最大流=最小割。
而倘若遇到下图情况,头疼了

这里写图片描述
如图,如果执行bfs一次扫描到增广路1->2->4->6,流量总量累加10,得到的残量网络无法继续进行增广,那么算法返回最大流为10。
然而实际上最大流是20,显然该算法是有问题的。
问题出在哪里呢?
显然每当算法结束(即使最后结果出错)时,所得到的残量网络必然不存在S->T边,而可能存在T->S边。
这里写图片描述
造成残量网络这种结果的是原网络中所有S->T路流量均达到容量大小,而T-S路却不一定存在。
类比最大流最小割原理,此时达到容量的S->T边集等于最小割,也就是我们要的最大流。
因此不论结果是否有错,结果中总能包括最大流,且错误就出在T->S边的保留上 。
显然对于最大流,我们不想要在所有S->T边流量最大的基础上,有回流的T->S边。
因此就需要引入反向边了。
我们为所有边设置反向边,并将其流量与正向边同步。为了保持T->S边流量为0,每当由于增广操作,T->S边流量上升,其反向边也同步上涨,而显然在残量网络中反向边是沿S->T方向的,这就又出现了一条增广路,计算机对此无法容忍,下调它的流量,我们的T->S边流量也随之回到了0,达到了目的。
以上便是对反向边方法的详细解释,对于某些基本概念不清的话需要先熟悉一下EdmondsKarp算法。


推荐阅读
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 近日,百度推出了一项新功能,允许用户通过搜索框直接登录邮箱,这一创新举措显著提升了用户体验。这不仅体现了百度在搜索引擎技术方面的持续进步,也为未来的搜索技术发展提供了重要启示。通过整合多种服务,搜索引擎正逐渐成为用户日常生活中的多功能平台,未来有望实现更多便捷的功能和服务。 ... [详细]
  • 经过半年的精心整理,我们汇总了当前市场上最全面的Android面试题解析,为移动开发人员的晋升和加薪提供了宝贵的参考资料。本书详细涵盖了从基础到高级的各类面试题,帮助读者全面提升技术实力和面试表现。章节目录包括:- 第一章:Android基础面试题- 第二章:... ... [详细]
  • 如何在 Angular 4 中实现跨域调用百度人脸识别 API? ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • 【Linux进阶指南】第一阶段第三课:体验与部署Ubuntu系统
    在正式踏上Linux学习之旅之前,本课程将引导你深入体验和部署Ubuntu系统。通过详细的操作步骤和实践演练,你将掌握Ubuntu的基本安装、配置及常用命令,为后续的进阶学习打下坚实的基础。此外,课程还将介绍如何解决常见问题和优化系统性能,帮助你更加高效地使用Ubuntu。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • JBPM 6.5 环境配置深入解析(下篇)
    本文深入探讨了JBPM 6.5 的环境配置细节,从零开始详细介绍了下载、解压后的文件结构,并结合实际操作步骤,为初学者提供了全面的配置指南。通过具体的示例和详细的解释,帮助读者快速掌握 JBPM 6.5 的安装与配置过程。 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • UGUI:借鉴NGUI的事件监听机制实现高效交互设计
    在Unity中,UGUI借鉴了NGUI的事件监听机制,以实现高效且便捷的交互设计。通过采用类似NGUI的UIEventListener方法,UGUI不仅简化了UI开发流程,还提升了项目的整体性能和用户体验。经过一段时间的实际应用,我们发现这种机制在复杂项目中表现尤为出色,能够显著提高开发效率和代码可维护性。 ... [详细]
  • 在本篇教程中,我们将详细介绍如何通过 GitHub Pages 和 Hexo 对博客首页进行优化,并实现文章互动功能。具体包括如何集成百度统计,注册并登录百度统计网站(https://tongji.baidu.com/web/welcome/login),获取统计代码并将其嵌入到博客中,以便实时监控访问数据和用户行为。此外,我们还将探讨如何添加评论系统,提升读者参与度和互动体验。 ... [详细]
  • 如何在Python中高效运用requests模块:详细使用指南与技巧分享
    在Python中,`requests`模块是处理URL请求的强大工具,作为一个第三方库,需要单独安装。本文将详细介绍如何高效地使用`requests`模块,涵盖从基础功能到高级技巧的各个方面,帮助开发者更好地掌握其应用方法,提高开发效率和代码质量。 ... [详细]
  • 计算机专业大三学生求职技术岗位,如何撰写一份出色的简历?附赠269个精选简历模板
    对于计算机专业的大学三年级学生来说,如何撰写一份出色的技术岗位简历是一个重要的课题。本文将详细介绍简历撰写的要点和技巧,并提供269个精心挑选的简历模板,帮助你在求职过程中脱颖而出。 ... [详细]
  • 地图集成方法与应用 ... [详细]
author-avatar
诚实的大丈夫_196
这个家伙很懒,什么也没留下!
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有