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


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

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

完备匹配

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

带权匹配与最

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

 

我们可以使用

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 

原创讲解,转载请注明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值