KM学习笔记
# 前言
头大~
# km算法简介
KM算法全称是Kuhn-Munkras算法,用于解决带权二分图中最大完美匹配的问题
# 什么是最大完美匹配
对于二分图,其二部划分,若所有顶点都是匹配点,则该匹配为完美匹配
# 什么是增广路
- 增广路的两端都是未匹配的点
- 増广路的边按
未匹配边
-匹配边
交替循环 - 増广路的边数为奇数
- 还没有想起来的话可以去复习一下
匈牙利算法
# km算法
km算法通过贪心地向子图中加边并増广达到匹配权值之和最大的目的。
首先,对于二部划分,定义一个值"标顶",对于任意边,有,初始时有,进而我们可以贪心地构建一副子图
对做匹配,当给匹配失败时,我们称在左侧(集)在増广路上的点集为,右侧同理,称为。此时我们假定一个值,并将増广路左侧(集)的标顶减去,増广路右侧(集)的标顶加上。那么对于边
- 若,此时与均不变,该边未添加进子图
- 若,此时减小,该边可能添加入子图
- 若,此时增大,该边未添加进子图
- 若,此时不变,原本在子图中的边仍保留
这里的取,意为要向子图中加边的最小变化值
加边以后,继续按照匈牙利算法
的方式増广即可。
# 参考链接
https://blog.sengxian.com/algorithms/km
https://www.cnblogs.com/wenruo/p/5264235.html
https://www.cnblogs.com/zpfbuaa/p/7218607.html
上次更新: 2021/02/24, 03:37:30