匈牙利算法:
由于最近复习图论,看到匈牙利算法很是头疼,主要是图论是理学院所开课程,因此证明很多。故打算从原理到证明,系统的讲解下该算法。
1.基础概念
首先为了便于理解,给出一些概念的数学定义:
途径:可以理解为,在一个图中,从某一个顶点开始,沿着某条边到达另一个顶点,接着做同样的操作,最后你所走过的路径叫做途径。当然途径中的边可以重复。
闭途径:起点和终点相同的途径。
闭迹:边各不相同的闭途径叫做闭迹。
圈:顶点各不相同的闭迹叫做圈。
K-圈:长度为k的圈
奇圈:k为奇数的k-圈
偶圈:k为偶数的k-圈
偶图:如果存在V(G)中的一个二划分(X,Y)(即,)使得X与Y都是独立集,那么V(G)是偶图。所谓独立集是指,该顶点集中的点两两互不相邻。
2.人员分配问题
在实际生活中,可能遇到这样一类问题,某个企业有n个员工x1,x2....xn和n种类型的工作。已知每个人都会一些工作。那么问题在于:能否找到一种方案使得每一个员工都能分配到一个自己胜任的工作?
3.问题转化
联系图论中的知识,问题变成,在任意给的偶图中求出其完美匹配(如果存在的话)
下面给出由Edmonds(1965)提出的匈牙利算法:
Step1:以任意匹配M开始(可以取M为空集),若M饱和X的每一个顶点,停止,因为M已经是完美匹配。否则,取X中M-不饱和顶点u,令