匈牙利算法的小总结

背景:

设G=(V,E)是一个无向图。如顶点集V可分区为两个互不相交的子集V1,V2之并,并且图中每条边依附的两个顶点都分属于这两个不同的子集。则称图G为二分图。二分图也可记为G=(V1,V2,E)。

给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。 选择这样的子集中边数最大的子集称为图的最大匹配问题(maximal matching problem)

(引自维基百科)

1. 匹配边:连结分属于V1和V2的两个顶点的边。其他边是未匹配边。

2. 匹配点:匹配边所连结的顶点。不在匹配边上的顶点就是未匹配点。

3. 交错路:设P是图G的一条路,如果P的任意两条相邻的边一条是已匹配边而另一条不是,就称P是一条交错路。

4. 增广路径:两个端点都是未匹配点的交错路叫做可增广路。

5. 为什么每找到一条增广路径能使匹配M的大小|M|加1?

由上述3和4,增广路径是由以未匹配点为起点和终点(起点和终点可为同一个未匹配点)且未匹配边和匹配边交替出现的路径。由于以未匹配点为起点和终点,故而增广路径上的第一条边和最后一条边必定是未匹配边。即增广路径具有形式<未匹配边, 匹配边, 未匹配边, 匹配边, ... , 匹配边,未匹配边>,假设增广路径上的匹配边数为n,易见未匹配边数为n+1。于是在将增广路径取反,即将匹配边所连结的两个顶点去配,将未匹配边所连接的两个顶点结配后,增广路径变成<匹配边, 未匹配边, 匹配边, 未匹配边, ... , 未匹配边,匹配边>,此时匹配边数由此前的n变为n+1。可见通过取反增广路径能使|M|增1.

 

2013-09-20 13:07:52

 

 

你可能感兴趣的:(匈牙利算法的小总结)