检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
#定义
一张图 是二分图当且仅当 的点集 可以分为两个点集 ,满足 ,,且对于 的每条边 ,其两个端点分别属于不同的点集。
#性质
- 如果将二分图的两个点集中的点分别染成黑色和白色,那么二分图中的每一条边都一定将一个黑色点和一个白色点相连。
- 二分图内不存在长度为奇数的环。
#判定
#定理
一个无向图是二分图,当且仅当图中不存在长度为奇数的环。
根据二分图的定义,图中的每一条边都从一个集合通往了另外一个集合,显然只有经过偶数条边才能回到同一个集合,故该定理成立。
#代码
1 |
|
#匹配
图 的一个匹配是 的一个边集 ,满足 中的所有边都没有公共端点。
简单来说,一张图的一个匹配就是一些没有公共端点的边。
#二分图最大匹配 —— 匈牙利算法
常用的二分图匹配算法是匈牙利算法,其正确性基于 Hall 定理,本质是不断寻找增广路来扩大匹配数。
#算法流程
将二分图的两个点集划分为「左点集」和「右点集」,并称其中的点为「左部点」和「右部点」。
枚举每一个左部点 ,然后枚举该左部点连出的边,对于一个出点 ,如果它没有被先前的左部点匹配,那么直接将 匹配 ,否则尝试让 的「原配」左部点去匹配其他右部点,如果「原配」匹配到了其他点,那么将 匹配 ,否则 失配。
尝试让「原配」寻找其他匹配的过程可以递归进行。需要注意的是,在每一轮递归中,每个右部点只能被访问一次。
算法的时间复杂度为 ,其中 是左部点个数, 是图的边数, 是右部点个数。
#代码实现
1 |
|
#参考资料
- 0x68 二分图的匹配,《算法竞赛进阶指南》(ISBN 978-7-83009-313-6,河南电子音像出版社),李煜东,2019 年 5 月第 5 次修订版。
- 【2018 五一清北培训】2. 二分图以及匈牙利算法,一扶苏一,2018 年 5 月 1 日。