一、基本概念
1.二分图
二分图是图论中的一种特殊模型。若能将无向图G=(V,E)的顶点V划分为两个交集为空的顶点集,并且任意边的两个端点都分属于两个集合,则称图G为一个为二分图。
二分图(Bipartite graph)是一类特殊的图,它可以被划分为两个部分,每个部分内的点互不相连。下图是典型的二分图,可以看到,在下面的二分图中,每条边的端点都分别处于点集X和Y中。。
2.匹配
图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。
这里,我们用一个图来表示下匹配的概念:
如图所示,其中的三条边即该图的一个匹配。所以,匹配的两个重点:1. 匹配是边的集合;2. 在该集合中,任意两条边不能有共同的顶点。
3. 最大匹配
选择这样的边数最大的子集称为图的最大匹配问题。最大匹配的边数称为最大匹配。
4.匈牙利算法
匈牙利算法(Hungarian algorithm),是图论中寻找最小(最大)匹配的算法。
对于一个二分图,匈牙利算法可以求得其最小匹配或最大匹配(求最大匹配只需要将边的权重取反)。匈牙利算法的流程如下:
准备过程:
1.将具有n条边的无向图邻接矩阵列出,得到n×n的矩阵;
2.将所有的行都减去该行的最小值;
3.将所有的列都减去该列的最小值。
循环过程:
1.使用最少的边数来覆盖矩阵中的0;
2.如果最少的边数等于n则循环结束;
3.将没被覆盖的区域都减去区域中的最小值,并将覆盖区域中两个边的交点处权重加上这个最小值。
最终选择:
对于循环过程中得到的矩阵输出,我们只需要在所有权值为0的边中选出它的匹配,这个匹配就是最小匹配。