匈牙利算法是一种用于在多项式时间内解决任务分配问题的组合优化算法,它推广了后来的原始对偶方法。
美国数学家哈罗德·库恩(Harold Kuhn)于1955年提出了该算法。
该算法之所以称为匈牙利算法,是因为该算法的很大一部分是基于前匈牙利数学家DéNESKőnig和Jenőegerváry的工作。
概念
在介绍匈牙利算法之前,我想介绍一些概念。
接下来的M是G 的匹配项。
如果是,则边缘已经在匹配的M上。
M交织路径:P是G的路径。
如果P中的边缘是属于m的边缘,而不属于m但属于G的边缘是交替的,则p是M交织的路径。
例如:路径。
M饱和点:例如,如果V与M中的边相关联,则称V为m饱和,否则V为非m饱和。
如果它们全部属于m饱和点,则其他点都属于非m饱和点。
M扩展路径:P是m隔行扫描路径。
如果P的起点和终点均为非m饱和点,则p称为m增强路径。
例如(不要与流网络中的扩展路径混淆)。
寻找最大匹配数的一种显而易见的算法是先找到所有匹配项,然后保留匹配数最大的匹配项。
但是该算法的时间复杂度是边数的指数函数。
因此,我们需要找到一种更有效的算法。
本文介绍了一种使用扩展路径查找最大匹配的方法(称为匈牙利算法,由匈牙利的
Edmonds于1965年提出)。
增强导轨(也称为增强导轨或交错导轨)的定义
如果P是连接图G中两个不匹配顶点的路径,并且属于m和不属于m的边缘(即,匹配边缘和待匹配边缘)在P上交替,则p称为相对于M.
从增强路径的定义可以得出三个结论
(1)P的路径数必须为奇数,并且第一个边缘和最后一个边缘都不属于M。
(2)通过将m和P取反可以获得更大的匹配度。
(3)当且仅当没有M的增强路径时,M是G的最大匹配。
算法概述:
(1)将M设置为null
(2)通过XOR操作找到扩展路径P并获得更大的匹配项而不是m
(3)重复(2),直到找不到增强路径。