算法:匈牙利算法


分配问题

设n个代理和n个任务。 可以分配任何代理以执行任何任务,这会产生一些费用,该费用可能会因代理任务分配而异。 要求执行所有任务,方法是将每个任务恰好分配给一个代理,将每个任务恰好分配给一个代理,以使分配的总成本最小化。

也称作指派问题。

算法

匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法。 Hungarian Algorithm。

基本步骤:

img

可以输入系数矩阵,在线使用匈牙利算法来求解任务分配问题的一个网站。

匈牙利算法的时间复杂度为 \(O(n^3)\)

问题分类

  • 平衡任务分配问题:N项任务恰好有N个人去完成,每人只完成一项任务,每项任务只能由一个人完成,用什么指派方案能使总效率最高。用匈牙利算法就好。 算法执行步骤

  • 不平衡任务分配问题:即任务数不等于人数,需要用修正的匈牙利算法去解决。 关于几种不平衡指派问题的修正匈牙利解法.pdf

带权重的匹配

引入KM算法,Kuhn-Munkres算法
https://github.com/saebyn/munkres-cpp