Skip to content

Munkres’ Assignment Algorithm

这是我在准备考研复试上机遇到的一个问题,在清华 OJ 上的题目,其实也是经典的题目

算法解决什么?

如图所示,一言以蔽之,找最小消耗的匹配。这个问题很常见,比如 n 个工人处理 n 个事情。

算法原理

还是一样,我不进行算法原理讲述,我只是搬运工。这里有几个不错的文章:
1. https://www.cnblogs.com/xiaxuexiaoab/p/17838305.html: 这篇文章可以暂时不用看后面的第四章及之后的内容,前面的例子特别好。
2. https://blog.csdn.net/yiran103/article/details/103826367: 这篇文章快速浏览一遍即可
3. https://users.cs.duke.edu/~brd/Teaching/Bio/asmb/current/Handouts/munkres.html: 这篇文章据说代码非常好,我当时就是看的这篇弄懂的。

注意: 不要和最大匹配弄混

这个方法也叫做匈牙利算法。我在网上查的资料,百分之八九十都在介绍二分图,介绍匹配。但很多都弄错了,匈牙利算法不是求最大匹配,而是求最大权匹配

最大匹配就是二分图中,找出匹配边数最多的匹配。而最大权匹配,是指的在最大匹配前提下,边上有权重,求出边权和最大的匹配。

对于上面的 Munkres' Assignment Algorithm,它是两两都有权重,所以最大匹配那肯定是 n,所以这个问题和最大匹配没关系,本质是最大权匹配。

Comments