匈牙利算法与增广路径

来源:互联网 发布:迁都南京 知乎 编辑:程序博客网 时间:2024/05/23 11:36

利用匈牙利算法可以求得二分图最大匹配。


匈牙利算法的基本原理如下:

①置M为空;

②找到一条增广路径P,通过异或操作获得更大的匹配M'代替M;

③重复②直到找不到新的增广路径。


增广路径的定义如下:

若P是图G中一条联通两个未匹配顶点的路径,且属于M的边和不属于M的边在P上交替出现,则称P为相对于M的一条增广路径。


上个图理解一下:

①初始状态


当前已有边(1,1')和(4,3')属于M。

②找到一条增广路径P


如图,增广路径P为:(3 - 1' - 1 - 3' - 4 - 4')。其中,不属于M的路径有:(3, 1')、(1, 3')和(4, 4'),属于M的路径有(1‘, 1)和(3', 4)。显然,在上面的路径P中,不属于M的路径和属于M的路径是交替出现的。[3-1'(蓝), 1'-1(黑), 1-3'(蓝), 3'-4(黑), 4-4'(蓝)]

③对第②步中的图进行取反,将原来属于M的路径去除,将原来不属于M的路径加入M中。(即蓝色的边变成黑色,黑色的边变成蓝色)


④完成。



最后再看一下由增广路径的定义可以推出的三个结论:

①P的路径长度必定为奇数,第一条边和最后一条边都不属于M

②P经过取反操作可以得到一个更大的匹配M

③M为G的最大匹配当且仅当不存在相对于M的增广路径

1 0
原创粉丝点击