形式陈述
给定 n ≥ 1 名工人与 n 项任务,以及实数 理路 实数系 Real number system · Ordered complete field 满足序域公理与上确界完备性的数系。 成本矩阵 C = ( c i j ) ,指派问题要求每人恰做一项、每项恰由一人承担,并使总代价最小。这是赋权二分图 理路 二分图 Bipartite graph 顶点可分成两个独立侧、且每条边都跨越两侧的有限简单无向图。 上的完美匹配 理路 匹配 Matching in a graph 由彼此不共享端点的边组成、表达一对一配对约束的边集合。 。以下先假设所有配对均允许,且数值运算精确。
匈牙利算法维护一个部分匹配及两组顶点势 u i , v j 。它们满足
u i + v j ≤ c i j , r i j = c i j − u i − v j ≥ 0. r i j 称为约化成本;等于零的边称为紧边。可以用 u i = min j c i j , v j = 0 初始化,因此原成本为负也不妨碍可行性。算法始终只匹配紧边。n = 0 的空指派直接返回空匹配,费用为零。
从一个未匹配工人出发建立交替树:由工人沿未匹配紧边走向任务,再由已匹配任务沿其匹配边返回工人。到达未匹配任务时,沿增广路 理路 增广路 Augmenting path 相对于当前匹配,边在未匹配与已匹配之间交替且两个端点均未匹配的路径。 翻转边的匹配状态,匹配数增加一。若全部可用紧边已扩展完,仍未到达空闲任务,记树中的工人、任务集合分别为 S , T ,取
Δ = min i ∈ S , j ∉ T r i j , 并对 i ∈ S 增加 u i 、对 j ∈ T 减少 v j ,变化量均为 Δ 。树内边两端变化抵消;从 S 到外部任务的约化成本减少至多 Δ ;其余约束不变或更宽松。因此势仍可行,至少一条新边变紧,可以继续扩展同一棵树。树中除根外的工人都与树内任务配对,故 | S | = | T | + 1 ;尚未增广时 T 不可能包含全部任务,完整成本矩阵下跨出候选始终非空。完成 n 次增广后输出匹配。
势是指派线性规划 理路 线性规划 Linear programming · LP 在线性等式和不等式约束下优化线性目标函数的问题。 的对偶变量。对任意完美匹配 M ,逐边相加给出
∑ ( i , j ) ∈ M c i j ≥ ∑ i u i + ∑ j v j . 若算法的完美匹配全部由紧边组成,不等式取等,故没有其他匹配能更便宜。这一最优性证书只需弱对偶,不必把强对偶定理当作额外黑箱。
直觉
顶点势先给每对工人、任务设定一个价格下界。紧边表示目前的下界已经触及真实成本,算法先尝试只用这些边完成分配。冲突出现时,并不立即放弃早先的匹配,而是沿交替路径搬动已有安排。
势调整解决的是“现有紧边不够用”:只抬高交替树中受阻工人的势,同时降低树内任务的势,使已有匹配继续紧,而通向新任务的某条边刚好变紧。匹配大小在增广时增长,对偶目标在正的势调整时增长;二者并非每一步都同步改变。
图片加载失败 紧边、交替树与势调整
例子与边界
考虑工人 A , B , C 与任务 1 , 2 , 3 的成本:
C = ( 1 2 8 1 4 8 8 8 1 ) . 初始势为 u = ( 1 , 1 , 1 ) , v = ( 0 , 0 , 0 ) ,紧边只有 A 1 , B 1 , C 3 。先匹配 A 1 ,再给 B 找任务时会沿 B → 1 → A 受阻,此时 S = { A , B } , T = { 1 } 。到外部任务的最小松弛量来自 A 2 ,为 Δ = 1 。
调整后 u = ( 2 , 2 , 1 ) , v = ( − 1 , 0 , 0 ) 。边 A 1 , B 1 仍紧,A 2 新变紧,于是沿 B → 1 → A → 2 增广,将 A 1 换成 B 1 , A 2 ,再匹配 C 3 。总代价为 1 + 2 + 1 = 4 ,恰等于势和 2 + 2 + 1 − 1 = 4 。这个证书同时说明,若先固定 A 1 再让 B 选剩余最便宜任务,会花费 1 + 4 + 1 = 6 ,逐行贪心并不正确。
矩形问题可以补虚拟行列,但虚拟成本必须表达真实的未指派代价。禁止配对的边应被排除;若受阻时没有任何有限的跨出候选,就应报告不存在完美匹配,而不能继续使用无穷大的势更新。求最大权时可把所有成本变号,再使用同一套最小化公式。
推论与应用
稠密实现为每个外部任务维护来自 S 的最小松弛量;每加入一个工人,只需扫描一行来更新它。一次增广至多扩展 n 个任务,耗时 O ( n 2 ) ,共 n 次,得到 O ( n 3 ) 算术操作界。若每次都重新搜索全部匹配或重算全部松弛量,不能自动得到这个界;大整数运算的位成本也需另外计算。
任务调度、数据关联和多目标跟踪可用成本矩阵表达两侧一对一的选择。一般图的带权匹配不满足二分结构,不能直接套用本算法。拟阵交算法 理路 拟阵交算法 Matroid intersection algorithm · Unweighted matroid intersection 在两个有限拟阵的交换有向图中寻找最短增广路,以独立性 oracle 构造最大公共独立集并在无路时输出秩和证书。 能把二分匹配编码为两个分割拟阵的交,但它使用交换图和独立性查询;这种更一般的表达并不直接继承这里的势更新和稠密时间界。
二分匹配多胞形 理路 二分图匹配多胞形 Bipartite matching polytope 证明二分图的非负边变量与顶点度上界已给出匹配凸包,并用交替扰动区分分数可行点和分数顶点。 解释了为什么非负边变量与度约束已足以给出整数顶点。若输入是一份长期分数计划而不是单次成本矩阵,Birkhoff–von Neumann 分解 理路 双随机矩阵的 Birkhoff–von Neumann 分解 Birkhoff–von Neumann theorem · Doubly stochastic matrix decomposition 在正支撑图中反复寻找完美匹配并扣除最小边权,把任意双随机矩阵精确拆成置换矩阵的凸组合。 逐次扣除带权完美匹配,把双随机计划还原成可执行排班。
参考资料