博主在做科研的时候想用匈牙利算法解决一个调度问题,因为对匈牙利算法的原理不太了解所以在网上查找了很多资料。
比较疑惑的是,关于匈牙利算法的对象是有权还是无权的网上似乎有两种声音
1.有许多资料讲解怎么用匈牙利算法解矩阵,这类资料看到的内容大多长这样:“第一步:使指派任务的系数矩阵经变换,在各行各列中都出现0元素...”
2.另一类资料看到的内容大多长这样:
那么匈牙利算法到底是用于求解无权二部图还是有权二部图的呢?
答案是:
1738年,瑞士数学家欧拉( Leornhard Euler)解决了柯尼斯堡问题。由此图论诞生。
1913年匈牙利数学家D.Konig最早提出匈牙利算法,用来求矩阵中0元素的个数,他证明了“矩阵中独立0元素的最多个数等于能覆盖所有0元素的最少直线数”,其实那个时候该算法还叫“匈牙利算法”。网上有很多资料将这个时候的该算法与KM算法比较,前者基于交替路和增广路找到最大匹配数(答案不唯一),后者求解最大(或最小)权值和。
1955年W.W.Kuhn在求解指派问题时引用了这一结论,并对具体算法进行改进,这个时候该算法正式叫“匈牙利算法”,也正是从这时起,匈牙利算法被广泛应用于指派问题。
D.Konig最早将该算法用于求矩阵中0元素的个数,博主目前没找到资料表明D.Konig研究的时候就从图的角度去理解这个问题,不过当年图论已经诞生100多年了已经,D.Konig有可能从图的角度去思考过。不过W.W.Kuhn是很有可能直接从图的角度思考过这个问题的,因为调度问题很多都涉及到图。