本文简单介绍 Hungarian Algorithm(匈牙利算法) 及其矩阵表示下的操作流程。翻译自维基百科。
匈牙利算法(Hungarian Algorithm)是一种组合优化算法(combinatorial optimization algorithm),用于求解指派问题(assignment problem),算法时间复杂度为 O(n3) 。Harold Kuhn发表于1955年,由于该算法基于两位匈牙利数学家的早期研究成果,所以被称作“匈牙利算法”。 —— 维基百科
1.指派问题
假设有三位工人A, B和C,需要分配他们每人完成一件工作;对于不同的工作他们索要不同的工钱,如下表所示。问题就是要找到一套开销最小的指派方案。
. | 扫地 | 擦窗户 | 清理浴室 |
---|---|---|---|
A | 100 元 | 300元 | 300元 |
B | 300 元 | 100元 | 300元 |
C | 300 元 | 300元 | 100元 |
使用匈牙利方法可以找到开销最小的方案,即A负责扫地,B负责擦窗户,C负责清理浴室,总开销为300元。
2.匈牙利算法的矩阵形式
给定 n 位工人以及
⎡⎣⎢⎢⎢a1b1c1d1a2b2c2d2a3b3c3d3