复杂网络中,单源单点的最小费用最大流算法(MCMF)应用广泛。

在实际网络问题中,不仅考虑从 Vs到 Vt的流量最大,还要考虑可行流在网络传送过程中的费用问题,这就是网络的最小费用最大流问题。

最小费用最大流问题的一般提法:已知容量网络 D=(V ,A ,C),每条弧 (Vi,Vj) 除了已给出容量 Cij 外,还给出单位流量的传输费用 bij≥0,记作D=(V, A, C, B),其中bij ∈B。要在费用、容量网络 D 中寻找 Vs→Vt的最大流 f={fij},且使流的总传输费用:

b(f)=Σbijfij 最小

从上一讲可知,最大流的求法就是在容量网络上从某个可行流出发,设法找到一条从 Vs→Vt 的增广链,然后沿着此增广链调整流量,作出新的流量增大了的可行流。在这个新的可行流基础上再寻找它的增广链。如此反复进行,直至再找不出增广链,就得到了该网络的最大流。

例子:给定费用、容量网络图(bij,cij),试求网络的最小费用最大流。

解:

(1)、初始取0流量,此时总费用为 f(0) = 0。

(2)、由原始网络构建费用网络图(费用网络图每条线路上的权重为bij,bij为单位流量的费用)。

(3)、通过当前费用网络图找到一个费用最少的路径,即vs->v3->v2->vt。通过该路径上每条线段的容量得出该线路能通过的最大流量,即调整量θ = min{8,5,7} = 5,即流量为5,当前的最小费用为 f(1) = 5*1+5*2+5*1 = 20。下图为流量网络图。

(4)、在(3)的基础上构造新的费用网络图,构造方法为:当线路没流量通过时,流量方向不变,费用为原始费用。如vs->v2;

当线路流量等于该线路的最大容量时,则流量方向改变,费用为原始费用的负数。如v3->v2变为v2->v3;

当线路流量小于该线路的最大容量时,则增加反向流量,费用为原始费用的负数。如vs->v3新增v3->vs;

(5)、在(4)中得到的费用网络图上,找到费用最少的路径,即vs->v2->vt,通过该路径上每条线段的容量得出该线路能通过的最大流量,即调整量θ = min{10,7-5} = 2,得到的最小费用流的流量为7,当前的最小费用为 f(2) = 2*4+5*1+5*2+7*1 = 30。

(6)、构造可行流 f2的费用网络图。

(7)、在(6)中得到的费用网络图上,找到费用最少的路径,即vs->v3->v4->vt,通过该路径上每条线段的容量得出该线路能通过的最大流量,即调整量θ = min{8-5,10,4} = 3,得到的最小费用流的流量为10,当前的最小费用为 f(3) = 2*4+8*1+5*2+7*1+3*3+3*2 = 42

(8)、构造可行流 f3 的费用网络图。

(9)、在(8)的费用网络图上,找到费用最少的路径,即vs->v2->v3->v4->vt,通过该路径上每条线段的容量得出该线路能通过的最大流量,即调整量θ = min{10-2, 10-3, 4-3, 5} = 1,得到的最小费用流的流量为11,当前最小费用为 f(4) = 3*4+8*1+4*2+7*1+4*3+4*2 = 55

(10)、构造可行流 f4 的费用网络图。

由于无法找到从 vs->vt 的最短路,所以 f(4) 就是该网络的最小费用最大流。

mysql最小费用最大流问题_最小费用最大流问题相关推荐

  1. python 最小硬币数_最小硬币数量的动态规划

    我需要创建一个程序,要求最低数额的硬币输入随机数额给定.我遇到了一个问题,在不破坏程序的情况下,实际需要最低金额.我还有这条线的程序:print (x, "cents requires&qu ...

  2. python 最小硬币数_最小假币问题的Python实现

    假设由29枚硬币,其中一枚假币,假币比真币重,有一个量程和精度足够的天平,怎样保证最少称重次数找出假币? 思路: 将硬币分为3堆,则每堆的硬币数量为 n/3 ,但是这是在 n%3==0 的情况下才能成 ...

  3. mysql最小费用最大流问题_图论-网络流之最小费用最大流问题

    n=5;C=[0 15 16 0 0 0 0 0 13 14 0 11 0 17 0 0 0 0 0 8 0 0 0 0 0]; %弧容量 b=[0 4 1 0 0 0 0 0 6 1 0 2 0 3 ...

  4. 删除单链上数据域值最小的节点_深入浅出数据结构

    作为一名前端开发工程师,你可能有时会问:学习数据结构或者算法对于前端工程师有用么? 总的来说,这些基础学科在短期内收效确实甚微,但是我们首先不要将自己局限在前端工程师这点上,当我们把视野放到编程这个角 ...

  5. mysql 获取年预提,【判断题】正确核算待摊费用和预提费用,有助于划分本期费用与非本期费用的界限。...

    [判断题]正确核算待摊费用和预提费用,有助于划分本期费用与非本期费用的界限. 更多相关问题 [单选] 如果整条线组件压力突然升高,原因可能是(). [多选] 风机的常见故障有(). [单选] 侧吹风窗 ...

  6. mysql最小费用最大流问题_算法笔记_140:最小费用最大流问题(Java)

    packagecom.liuzhen.practice;importjava.util.ArrayList;importjava.util.Scanner;public classMain {publ ...

  7. opencv 图像轮廓特征 图像面积,轮廓周长,外接矩形、最小外接矩形、最小外接圆、拟合椭圆

    找出图像轮廓 contours, hierarchy = cv.findContours(thresh, 3, 2) 画出图像轮廓 cnt = contours[1] cv.drawContours( ...

  8. mysql数据库不小于_小于mysql

    mysql启用hugepage 1 hugepage在linux 2.6以后的内核才支持,mysql中只有innodb引擎才支持,hugepage作用: 1.减少内存置换 2.减少TLB miss次数 ...

  9. 基于最小错误概率与最小风险的贝叶斯决策

    基于最小风险的贝叶斯决策是最小错误概率的一种改进,显然,但对不同类判决的错误风险一致时,最小风险贝叶斯决策就转化成最小错误率贝叶斯决策.最小错误贝叶斯决策可以看成是最小风险贝叶斯决策的一个特例. 最小 ...

最新文章

  1. 写时复制(Copy-On-Write)思想在Java中的应用
  2. python自带的数据库_Python小白的数据库入门
  3. wince6.0远程控制工具_【创新创效】门架业务主动监测工具和远程控制电源开关...
  4. Python学习笔记:错误和异常
  5. Excel VBA - Workbook对象
  6. 未来十大技能职场吃香
  7. php表单中姓名必须使用汉字,我想在表单验证中加入中文姓名合法性模糊匹配判断?...
  8. linux 访问centos共享,CentOS访问Windows共享
  9. java中怎样任意跳转到指定行而不受循环语句限制
  10. unity脚本中print及Debug.Log
  11. 【语音增强】基于matlab iir带阻滤波器语音增强【含Matlab源码 613期】
  12. 文献阅读——Revisiting Semi-Supervised Learning with Graph Embeddings
  13. 概率算法中的Monte carlo算法
  14. Win7更换锁屏和开机画面
  15. itext修改pdf文字
  16. python结构方程模型_SEM结构方程模型分析的数据需要至少多少样本量
  17. 华为运营商级路由器配置示例 | 公网IPv6 over SRv6 TE Policy
  18. 猫和老鼠玩象棋,玩了M+N局,猫赢了M局 老鼠赢了N局 NM,而且在整个过程中,猫的得分从来没有超过过老鼠,问共有多少种可能的比赛得分过程
  19. 测试点设计及编写思路
  20. 为什么TCP服务端需要调用bind函数而客户端通常不需要呢

热门文章

  1. ORM sqlachemy学习
  2. 在此激励自己,记录自己的学习历程
  3. react native快速上手
  4. 输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载
  5. oracle创建表(并且实现ID自增)
  6. request 和 session 获取方法
  7. HTML中的IE条件注释
  8. 海量存储——致性和高可用专题
  9. LCP 19. 秋叶收藏集
  10. java分层model_SpringMVC体系分层模式原理图解