匈牙利算法学习笔记

本文深入探讨了匈牙利算法的正确性,通过引理一和引理二证明了最大匹配的存在性及增广路径的寻找方法。同时阐述了最小点覆盖与最大匹配相等的证明,通过染色过程展示两者之间的关系。
摘要由CSDN通过智能技术生成

匈牙利算法的正确性证明

匈牙利算法通过不断对当前匹配找增广路(交错轨),删去增广路上所有在当前匹配中的边,然后给当前匹配添加增广路上的其余边,就能使当前匹配数加一。一直重复这个操作,就能求出最大匹配。

证明用到两个引理。

引理一:假设当前匹配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中的边,选择方式如下:

  1. 每选择一条N里面的边,就要选择一条M里面的边。
  2. 如果上一条边为ab,那么下一条边就要选bc,也就是说相邻两次选择的边,要有一个点重合
  3. 直到所选
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值