二分图带权匹配 KM算法与费用流模型建立
来源:互联网 发布:淘宝网店手机可以看吗 编辑:程序博客网 时间:2024/05/16 04:51
转自http://hi.baidu.com/lerroy312/item/42e718ba58a1f8df85dd795f
[二分图带权匹配与最佳匹配]
什么是二分图的带权匹配?二分图的带权匹配就是求出一个匹配集合,使得集合中边的权值之和最大或最小。而二分图的最佳匹配则一定为完备匹配,在此基础上,才要求匹配的边权值之和最大或最小。二分图的带权匹配与最佳匹配不等价,也不互相包含。
我们可以使用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算法也有其不可避免的局限性,就是必须用邻接矩阵来表示。这样会浪费很多的空间,尤其是图相当稀疏的时候。而对于十分稀疏的图,许多优秀的费用流算法效率是很高的。这并不说明KM算法不如费用流,毕竟在信息学竞赛中,编程的复杂度也是一个相当重要的需要考虑的因素。
BYVoid 原创讲解,转载请注明。
- 二分图带权匹配 KM算法与费用流模型建立
- 二分图带权匹配 KM算法与费用流模型建立
- 二分图带权匹配 KM算法与费用流模型建立
- 二分图带权匹配 KM算法与费用流模型建立
- 二分图带权匹配 KM算法与费用流模型建立
- 二分图带权匹配费用流模型建立
- 二分图带权匹配的KM算法以及费用流建模
- POJ-2195 Going Home (最小费用最大流初学 && 最大权二分匹配—KM算法)
- BZOJ 4819: [Sdoi2017]新生舞会 01分数规划 二分图最大权匹配(KM算法)/费用流
- HDU 1533Going Home(KM算法求二分图最小权匹配或者最小费用最大流)
- 二分图匹配【KM算法】
- 二分匹配_最佳匹配KM算法
- 【玲珑杯 1047】【二分匹配 KM算法或者费用流】Best couple【定义男女生的距离为最短距离,求匹配之后使得总距离最大】
- HDU3722 Card Game KM算法的二分图带权匹配
- km算法(求二分图带权的最大匹配)
- SCU2016-01 H题 (二分图带权匹配 KM算法)
- HDU 2426 Interesting Housing Problem 二分匹配(KM模板)或者最小费用最大流
- 二分图完备匹配(最小费用 || KM) poj 2195 GoingHome
- Excel中将姓名与手机号中的字符替换成星号*
- LINUX下搭建FTP服务器
- Android中的Handler, Looper, MessageQueue和Thread
- 黑马程序员.Android攻城狮.JAVA基础.1.3.Java面向对象
- 以后就在家做做面包,带带孩子吧
- 二分图带权匹配 KM算法与费用流模型建立
- hbase架构介绍
- Aizu 2249 单源最短路变形 spfa模板改写
- OCP 1Z0 052 162
- 抽象类例题
- Spring 学习之Spring能做什么?
- uva 10712 - Count the Numbers(数位dp)
- cuda与openGL互操作
- Yii在控制器中对视图js的控制