匈牙利算法的正确性证明
匈牙利算法通过不断对当前匹配找增广路(交错轨),删去增广路上所有在当前匹配中的边,然后给当前匹配添加增广路上的其余边,就能使当前匹配数加一。一直重复这个操作,就能求出最大匹配。
证明用到两个引理。
引理一:假设当前匹配M所选的点集为V,那么一定存在一个最大匹配,其所选的点集是V的一个超集。
假设M已经是一个最大匹配,则已符合引理一。假设M不是最大匹配,那么任选一个最大匹配N,其所选的点集为U。
显然M中的每一条边,至少有一个端点在U中,因为如果两个端点都不在U中,那么给N加上这条边,就能得到一个更大的匹配,与N为最大匹配的假设不符。
那么对于M中的每条边,如果有一个端点a在U中,一个端点b不在U中,只需要先把N中a连的那条边删掉,再把ab加入N中即可。这个过程完成之后,U就成为了V的一个超集,同时N的匹配数也保持不变。引理一得证。
引理二:如果当前匹配M不是最大匹配,那么一定能找到一条增广路。
还是假设M所选的点集为V,根据引理一,一定有一个最大匹配N,其所选的点集U是V的一个超集。那么在N里面至少能找到一条边,使得边的两个端点至少有一个属于U和V的差集,从这条边开始,交错选择N和M中的边,选择方式如下:
- 每选择一条N里面的边,就要选择一条M里面的边。
- 如果上一条边为ab,那么下一条边就要选bc,也就是说相邻两次选择的边,要有一个点重合
- 直到所选的边和上一条边不重合的那个点,不在V中,选择结束。
将选择的所有边连在一起,就是一条增广路。引理二得证。
如果当前匹配是最大匹配,那么一定找不到一条增广路,因为如果找到了,和当前匹配是最大匹配的假设不符,同时应用引理二匈牙利算法得证。
最小点覆盖等于最大匹配的证明
先找到一个二分图的最大匹配,那么最小点覆盖数等于最大匹配数。
对于图的每一条边,其两个端点至少有一个在最大匹配

本文深入探讨了匈牙利算法的正确性,通过引理一和引理二证明了最大匹配的存在性及增广路径的寻找方法。同时阐述了最小点覆盖与最大匹配相等的证明,通过染色过程展示两者之间的关系。
最低0.47元/天 解锁文章
11万+

被折叠的 条评论
为什么被折叠?



