匈牙利算法简介 → 二分图最大匹配
【匈牙利算法简介】
● 匈牙利算法是解决“二分图最大匹配”问题的专精算法,由匈牙利数学家 Edmonds 于 1965 年提出,其主要功能是「求二分图的最大匹配的数量」。
● 匈牙利算法的冲突处理逻辑
设集合 U 和 V 为二分图的两个顶点集,M 为当前匹配集合。当元素 x∈U 需要与元素 y∈V 匹配,但 y 已与元素 z∈U 匹配时,算法的冲突处理逻辑为:
(1)检查元素 z 能否与集合 V 中其他元素 c(c≠y)形成新的匹配。
(2)若存在这样的元素 c,则将匹配关系调整为 (z,c) 和 (x,y)。
(3)若不存在,则继续为 x 寻找 V 集合中的其他匹配候选。

显然,匈牙利算法冲突处理的逻辑是“后来者居上”、“腾位子”。
● 匈牙利算法的示例
俗话说,“男女搭配,干活不累”。已知二分图的一部分是“男生集合”,另一部分是“女生集合”。若把具有好感的男女生匹配为“干活搭子”,请问最多能匹配成多少对儿?这就是匈牙利算法要解决的问题。(备注:具有好感的男女生已用线在二分图中进行了连接)

(1)遍历到 1 号男生,发现他和 2 号女生具有好感。因此,将他俩连一条红线配成“干活搭子”。

(2)遍历到 2 号男生,发现他和 1 号女生具有好感,因此,将他俩连一条红线配成“干活搭子”。

(3)遍历到 3 号男生,发现他和 2 号女生具有好感,但是 2 号女生已经和 1 号男生配对了。
怎么办?观察易知,1 号男生还和 4 号女生具有好感。那么问题就简单了。解决方法是给 1 号男生和 2 号女生连一条绿线,标示他们分开。然后再把 1 号男生和 4 号女生连一条红线配成“干活搭子”,3 号男生和 2 号女生连一条红线配成“干活搭子”。此番操作,都有配对,皆大欢喜。

(4)遍历到 4 号男生,发现他和 3 号女生具有好感。因此,将他俩连一条红线配成“干活搭子”。最后,获得最大匹配数量为 4 对。

【匈牙利算法求解“”代码】
【参考文献】

浙公网安备 33010602011771号