最小费用最大流问题详解

简介: 最小费用最大流问题详解

最小费用最大流问题详解

一、问题描述

在网络中求一个最大流f,使流的总输送费用最小。

image.png

伴随网络流 f 的增流网络:设 f是网络 D = ( V , A , C , F , B )的一个网络流,按照以下规则构建一个新的网络 D f = ( V , A ′ , C ′ , B ′ ) ,该网络称为伴随 f 的增流网络。

V为顶点集,A为弧集,C为容量集,F为流量集,B为费用集

image.png

image.png

负回路:在增流网络Df 中,所有的权(费用)之和小于零的回路称为负回路。

增流圈:在增流网络Df 中的负回路对应网络D中的一个圈,在这个圈中,如果方向与这个负回路方向相同的所有弧都为不饱和弧,方向与负回路方向相反的所有弧都为非零流弧,则这个圈称为增流圈。

二、求解思路

2018122814580746.png

解法I:求得最大流量调整流量分布达到最小费用

利用最大流算法,将网络的流量调整到最大流

构建伴随网络流 f的增流网络 D f

image.png

针对负回路对应网络 D中的圈,若该圈是增流圈,则把增流圈方向上与负回路方向一致的所有弧的流量加上 θ,把增流圈方向上与负回路方向相反的所有弧的流量减去 θ ;若该圈不是增流圈,则转到步骤3重新寻找负回路。

解法II:满足最小费用寻找最小费用增广链达到最大流量

image.png

三、实例

增流网络实例

有如下网络D:

2018122814580746.png

其对应的增流网络如下:

2018122814580746.png

过程:

image.png

解法I实例

实例

2018122814580746.png

首先寻找最大流,从起点出发到终点结束,将流量充满,得到最大流量图。

2018122814580746.png

然后构建增流网络

2018122814580746.png

构建好之后寻找负回路,可见这条负回路的最小容量为4,则 θ 取4

2018122814580746.png

调整原网络,可以看到对应原网络中为增流圈,与负回路与负回路方向一致的所有弧的流量加上 θ ,把增流圈方向上与负回路方向相反的所有弧的流量减去 θ得到网络 D2

2018122814580746.png

构建 D2的增流网络 Df2

2018122814580746.png

寻找负回路,发现已经找不到负回路,说明网络 D2 已经是最小费用,结束算法,得到最小费用最大流,最大流为11,最小费用为: 3 × 4 + 8 × 1 + 4 × 2 + 4 × 3 + 7 × 1 + 4 × 2 = 55

解法II实例

暂略待更


相关文章
|
存储 Serverless 云计算
函数计算FC存储和流量的费用比例,
函数计算FC存储和流量的费用比例, 有历史经验可以参考么?
77 2
土方量的几种计算方法
土方量的几种计算方法
283 1
|
4月前
|
C++
G : 最大流问题
这篇文章介绍了最大流问题的基本概念和求解方法,并通过C++代码实现了使用广度优先搜索(BFS)和残余网络来计算有向图中从源点到汇点的最大流。
|
7月前
|
算法 测试技术 C++
【大根堆】【C++算法】871 最低加油次数
【大根堆】【C++算法】871 最低加油次数
|
7月前
leetcode-871:最低加油次数
leetcode-871:最低加油次数
36 0
|
弹性计算
阿里云带宽计费模式按固定带宽和按使用流量选择计算方法
2023阿里云带宽计费模式按固定带宽和按使用流量选择计算方法,阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算?按固定带宽计费1M带宽一个月23元,按使用流量计费1GB流量0.8元,如果云服务器带宽使用率低于10%,那么首选按使用流量计费,如果带宽实际利用率较高的话,按固定带宽计费更划算一些。云服务器吧来详细说下阿里云服务器带宽不同计费模式下收费价格、费用计算方法及如何选择更合适说明:
355 0
阿里云带宽计费模式按固定带宽和按使用流量选择计算方法
每日一题——最低加油次数
每日一题——最低加油次数
101 0
每日一题——最低加油次数
|
数据库
网站并发量的计算方法
你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如何计算呢? PV是什么:PV是page view的简写。PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv。
2303 0
|
算法 C# 索引
C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)
原文:C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)   核心寻峰算法的原理参考Ronny,链接:投影曲线的波峰查找, C#翻译原理代码参考sowhat4999,链接:C#翻译Matlab中findpeaks方法  前人种树,后人乘凉。
1992 0