什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得

集合中边的权值之和最大或最小。而二分图的最佳匹配则一定为

完备匹配

在此基础上,才要求匹配的边权值之和最大或最小。二分图的

带权匹配与最

佳匹配不等价,也不互相包含

我们可以使用

KM

算法实现求二分图的最佳匹配。方法我不再赘述,可以参

tianyi

的讲解

KM

算法可以实现为

O(N^3)

[KM

算法的几种转化

]

KM

算法是求最大权完备匹配,如果要求最小权完备匹配怎么办?方法很简

单,只需将所有的边权值取其相反数,求最大权完备匹配,匹配的值再取相

反数即可。

KM

算法的运行要求是

必须存在一个完备匹配

,如果求一个最大权匹配

(

不一

定完备

)

该如何办?依然很简单,把不存在的边权值赋为

0

KM

算法求得的最大权匹配是

边权值和

最大,如果我想要

边权之积

最大,又

怎样转化?还是不难办到,每条边权取自然对数,然后求最大和权匹配,求

得的结果

a

再算出

e^a

就是最大积匹配。

至于精度问题则没有更好的办法了。

[

求最小

(

)

权匹配的费用流建模方法

]

求最小

(

)

权匹配,可以用最小

(

)

费用最大流的方法。和二分图最大匹配的

构图方法类似,添加附加源

S

和附加汇

T

,从

S

向二分图

X

集合中每个顶点

连接一条权值为

0

,容量为

1

的有向边,从

Y

集合中每个顶点向

T

也连接一

条权值为

0

容量为

1

的有向边。

然后把原有的边变成容量为

1

权值不变的

有向边。求从

S

T

的最小

(

)

费用最大流,就能求得最小

(

)

权匹配。

上述建模求最大权匹配的方法求得的

一定

是最佳匹配

(

如果存在完备匹配

)

S

X

集合每条边全部满流。如下图所示,最小费用最大流为

2

要求最大权匹配

(

不一定完备匹配

)

。如下图,只需再引入一个顶点

A

,从

X

集合的每个顶点向

A

连接一条容量为

1

,权值为

0

的边,然后再由

A

T

接一条权值为

0

,容量不小于

|X|

的边,求最大费用最大流,这时是

100

最小权匹配也类似,

不过新加的边权要为一个极大值,

大于所有已有边权值。

[KM

算法与费用流的比较

]

从理论上分析,

KM

算法的时间复杂度比费用流要好,但是实际上和较好的

费用流算法比起来运行效率是差不多的,

KM

算法优势仅仅在于编程容易。

而对于十分稀疏的图,

许多优秀的费用流算法效率是很高的。

这并不说明

KM

算法不如费用流,毕竟在信息学竞赛中,编程的复杂度也是一个相当重要的

需要考虑的因素。

BYVoid

原创讲解,转载请注明。

http://wenku.baidu.com/view/f9b3b08a680203d8ce2f2452.html相关推荐

  1. 分区文件http://wenku.baidu.com/view/d839d1868762caaedd33d4b7.html

    http://wenku.baidu.com/view/d839d1868762caaedd33d4b7.html

  2. http://wenku.baidu.com/view/63e7b8270066f5335a812142.html

    ---恢复内容开始--- http://wenku.baidu.com/view/63e7b8270066f5335a812142.html 迷宫最短路径问题解析 有一个二维数组,0表示路,-1表示墙 ...

  3. https://wenku.baidu.com/view/1f9138e903d8ce2f01662306.html

    https://wenku.baidu.com/view/1f9138e903d8ce2f01662306.html

  4. https://wenku.baidu.com/view/35c88b375acfa1c7aa00ccca.html--swot

    https://wenku.baidu.com/view/35c88b375acfa1c7aa00ccca.html 转载于:https://www.cnblogs.com/anruy/p/97519 ...

  5. Analysis of Struts2 : http://wenku.baidu.com/view/ad421874a417866fb84a8e75.html

    http://wenku.baidu.com/view/ad421874a417866fb84a8e75.html

  6. http://wenku.baidu.com/view/981f99d376eeaeaad1f330e7.html

    http://wenku.baidu.com/view/981f99d376eeaeaad1f330e7.html

  7. http://wenku.baidu.com/view/d6433106a6c30c2259019e63.html

    http://wenku.baidu.com/view/d6433106a6c30c2259019e63.html

  8. https://wenku.baidu.com/view/24def725e53a580217fcf

    https://wenku.baidu.com/view/24def725e53a580217fcfe6d.html 转载于:https://blog.51cto.com/11067786/23404 ...

  9. http://wenku.baidu.com/view/8378e414f18583d049645951.html

    http://wenku.baidu.com/view/8378e414f18583d049645951.html http://wenku.baidu.com/view/a88aff0d6c85ec ...

最新文章

  1. go语言中的float类型
  2. QIIME 2教程. 19使用q2-vsearch聚类ASVs为OTUs(2020.11)
  3. 单链表 操作的18种算法
  4. python:继承日志模块生成自定义日志
  5. 使用Java第2部分查询DynamoDB项
  6. 办公室分配方案python_Python自动化办公室(1),python,一
  7. 深度学习在计算机视觉点云中的发展与未来
  8. 多维度对比5款主流分布式MQ消息队列
  9. 项目交接文档_项目管理反思
  10. 简易方法判断浏览器的类型和版本
  11. cocoapods的安装使用
  12. 微软Power Platform在中国市场正式商用 无缝衔接微软智能云“三驾马车”
  13. C64+DSP资源手册笔记
  14. ollydbg 教程
  15. 教资之教育知识与能力 第一章第四节
  16. 接入层-汇聚层组网设计配置案例——双归上行-负载
  17. 根据录入的计算公式计算_炒股还需工匠精神:请笑纳30个财务分析指标和计算方式,上市公司财务分析必备,速速珍藏...
  18. 学习笔记 | 演化简单的程序用于玩 Atari 游戏
  19. c语言快速平方根算法,单片机开平方的快速算法
  20. Python 按时间顺序读取所选目录下文件

热门文章

  1. 股市的这拨行情何时见顶?
  2. Win10输入法不能用切换不了
  3. 如何提供BlackBerry程序的OTA下载
  4. 转下muyuyuzhong的文章VS2005中文版下载地址和msdn_vs2005中文版
  5. 多暂估的库存如何调整_多暂估的应付账款要如何调整
  6. 华硕笔记本系统损坏怎么用U盘重装Win10教学
  7. 网易游戏QA:在提高游戏用户和收入方面,有哪些经验?
  8. cmd命令打开文本文档_善用bat命令提高办公效率
  9. CSS3图像和背景的学习
  10. CH438Q芯片详细解读