匈牙利算法
- 算法简介
- 算法原理
- 算法实现(附代码)
- 测试
算法简介
下面摘用百度百科中的解释。
匈牙利算法(Hungarian method)是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是二分图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。
简单来说,匈牙利算法就是为了解决匹配问题的一种算法。
可以设想这样一个问题,有三个工人要共同完成三件任务。每个人只能专注完成一件任务。且工人完成不同任务所需要的时间是不一样的。当然这里可以直接通过枚举的方式来遍历所有的分配方式来进行求解。但当求解的问题的维度变得比较大时,这样处理就显得不太明智了。所以,为了解决这一类问题,匈牙利算法得以提出。
算法原理
算法的输入时一个代价矩阵 c c ,其中 表示工人i在任务j上的工作时长。
算法总的来说分成几步。
step1
将矩阵 c c 化为每行每列都至少有一个0的矩阵。
例如输入矩阵