之前大一的时候有学姐讲过二分图匹配的匈牙利(Hungrain)算法,当时没理解。最近想补补图论,学习一下二分图匹配的匈牙利算法,其实挺简单的。
先弄清二分图匹配时重要的几个概念:
(1)交替路:从一个未匹配的顶点出发,依次经过未匹配边,匹配边...,这样由匹配边,非匹配边交替形成的路称为交替路。一定先理解这个概念,才能理解增广路的概念。
(2)增广路:从一个未匹配的顶点出发,沿交替路走,到达第一个未匹配顶点时到达终点,这个过程形成的路称为增广路。
增加匹配的关键在于在整个图中寻找增广路,如果找不到增广路,则已经找到最大匹配(Berge 定理)。否则,我们可以将增广路中所经过的边进行修改,若其原来是匹配边,则我们将其修改为未匹配边。若其原来是未匹配边,则将其变为匹配边。这样可以增加一对匹配。为什么呢?因为增广路上一定是匹配边比未匹配边少一条,可以根据定义想一想。有了这个性质,那么我们就只需要找增广路就行了。再根据Berge定理,就找到了最大匹配。看两幅图来感受一下寻找增广路增加匹配的例子: