[关闭]
@qq290637843 2021-01-30T04:47:04.000000Z 字数 1303 阅读 419

关于最小权匹配

考虑两个大小为的点集,两个集合之间有一完全二分图,边具有边权。下文中所有都是指中的点,都是指的中的点。

最小权匹配首先就有一个算法是KM算法,其思路如下:考虑求一组点权以及满足:

并且对于满足的边构成的子图,要存在一个完美匹配。
KM的调整的做法是:每一次选择一个未匹配的,搜索出从其出发走交错路能到达的所有点构成的集合。这里的交错路必须只走的边。于是有两种可能,一种是出现了一条增广路,那么这意味着可以直接增广,使得匹配量加一,另一种可能是没有增广路,那么,这时取,并将中的全都加上,将中的全都减去,然后重新从出发找新的
总计会从出发试图增广,每次增广最多触发次改值(因为每次该值之后,一定是增大的,注意有些博客说满足的边数一定增多,这并不一定,因为该值之后,之间的边可能从满足等式变成小于),而每次改值会有至多个点要改值,故总计个点要改值。但是,每次求的过程可能会花费的时间,所以直接这么裸写,会导致时间复杂度为。网传这个算法有办法优化到,但是我实在没找到,但是我找到另一篇论文,不排除网传的“版KM”就是指这个的可能性。但我个人人为下一段所说的算法中有个细节差别太大了。

现在依旧考虑是要求出一组点权以及满足,且的边构成的子图要有完美匹配。
LAPJV的做法是:每次选择一个未匹配的,按照作为长度(这说明这次不限制只走的边),只走交错路,运行狄克斯特拉,求出最短增广路,长度设为,并且顺带存下求出最短增广路之前到所有的距离(就是说,如果,则在之后不会再用到)。接着,开始改点权以及增广:将所有中点的分别减掉,这个操作不会导致,但可能导致已经匹配的边不再满足相等性。接着,沿着最短增广路增广,得到新的匹配,再接着,由于此时新匹配不一定每条边都满足相等性,那就把所有匹配边上的增大到让匹配边满足相等性为止。请自行证明这样增加之后,不会被破坏。于是一共执行次增广,每次增广消耗运行狄克斯特拉,并消耗改点权,总计

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注