匈牙利算法基本思路
(1)通过行/列变换让费用矩阵的每行和每列都出现0
(2)找出不同行不同列的n个0
(3)这些0对应的指派就是最优指派
匈牙利算法主要步骤
(1)对费用矩阵先做行变换再做列变换。从每一行减去该行的最小值,从每一列减去该列的最小值
(2)用最少的水平线或垂直线覆盖所有零
(3)如果水平线和垂直线的总数小于样本数N,则找到没有被覆盖的最小值,没有被覆盖的每行减去最小值,被覆盖的每列加上最小值。然后重复步骤(2)、(3)知道水平线和垂直线的总数等于样本数
(4)根据零元素所在位置确定最优指派
实际举例
问题描述:给N个人分配N项任务,一个人只能分配一项任务,一项任务只能分配给一个人,将一项任务分配一个人需要支付一定的报酬,如何分配任务才能保证支付的报酬总数最少。