Skip to content

匈牙利算法

Hungarian algorithm

通过对偶标号和增广结构求解赋权二分图完美匹配的算法。

条目类型
算法

形式陈述

匈牙利算法求二分图完美匹配的最小总代价,等价于方阵指派问题。线性规划对偶为给左右顶点势 ui,vj,满足 ui+vjcij,最大化 ui+vj。算法维护对偶可行势和只含紧边 ui+vj=cij 的相等子图,在其中寻找增广路;若无法增广,就按最小松弛量调整势以产生新紧边。经典实现为 O(n3)。最大权版本可变号或改写势不等式。

直觉

匈牙利算法用顶点势给每个任务和工人分摊“基础价格”,把指派成本变成非负约化成本,并只在成本恰好等于两端价格和的“紧边”所组成的相等子图中寻找增广匹配。若当前相等子图无法继续增广,就调整势,在保持对偶可行的同时让至少一条新边变紧,逐步暴露候选边;匹配大小与对偶目标同步推进。它是原始—对偶思想的具体实现,而不只是某种矩阵行列减法技巧。

紧边、交替树与势调整
例子与边界

三名工人与三项任务构成 3×3 成本矩阵,算法最终选每行每列恰一个元素。矩形矩阵可补虚拟顶点和零/适当成本化为方阵。匈牙利算法求的是带权二分匹配,不是一般图带权匹配;也不能简单用逐行最便宜任务,因为会产生列冲突。势更新必须保持所有对偶约束可行,紧边上的完美匹配与对偶目标相等时由强对偶证明最优。

对成本矩阵,给每行、列维护势 ui,vj,要求 ui+vjcij;约化成本为 cijuivj0。找到全匹配且所有匹配边紧时,原始匹配成本等于对偶势和,由弱对偶知已最优。

最小化与最大化版本的符号和初始化不同,直接复制公式容易反向。非方阵可补虚拟行列,但虚拟边成本需表达“未指派”语义;算法处理的是二分图指派,不是一般图最大匹配的同名历史算法混用。

推论与应用

指派问题出现在任务调度、数据关联、最优配对和多目标跟踪;匈牙利算法也是原始—对偶方法的经典实例。

二分匹配 是原始解,线性规划 与对偶势解释最优性,成本矩阵 给出稠密输入。任务分配、最小权完美匹配和多目标关联都可归约到指派问题。

Hungarian algorithm解决二分图完美匹配/指派的加权特例,依顶点势与增广结构。拟阵交算法把“同时独立于两个拟阵”作为更一般接口,二分匹配可编码为两个分割拟阵的交;这并不让 Hungarian 的势更新直接推广到一般拟阵 oracle,后者使用交换图并有独立查询成本。

参考资料
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
  • Jon Kleinberg and Éva Tardos, Algorithm Design, Pearson, 2005,Chs. 1–13。
关系图谱7 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

实现的抽象