KM 算法

概念推导

  • 可行顶标:每个节点有一个顶标值 $L(u)$,二分图两边的顶标分别记为 $Lx(u),Ly(v)$
  • 可行顶标性质:$lx(x)+ly(y)\geq w(x,y)$
  • 可行边:边 $w(x,y)$ 满足 $lx(x)+ly(y)=w(x,y)$
  • 相等子图:原图中只包含可行边的生成子图
  • 完备匹配:匹配中每个顶点与某条边相关
  • 最大权重匹配定理:若某个相等子图中有完备匹配,则该匹配为原图最佳匹配
  • 松弛函数:二分图一边的节点保存 $slack(x)=\min(lx(i)+ly(j)-w(i,j))$
  • 顶标修改:减少不在交错路中最小的松弛值

算法流程

  1. 初始化可行顶标值
  2. 用匈牙利算法寻找相等子图的完备匹配
  3. 无增广路则修改顶标
  4. 重复2,3至找到完备匹配