匈牙利算法可以寻找有权二部图中的最小匹配。
上图是一个3×3的矩阵,数字代表权重,利用匈牙利算法就可以找到他们之间的最小匹配,具体步骤为:
1.找出每一行的最小值(第一行:8,第二行:35,第三行:22)。
2.让每一行的所有元素减去其最小值(第一行:减8,第二行:减35,第三行:减22),这样每一行至少有一个0。
3.让每一列的所有元素减去其最小值,这样每一列至少有一个0。
4.开始循环(A.用尽量少的线覆盖矩阵中所有的0元素。
B.判断是否需要终止循环(1.假如用n条线才能覆盖所有的0元素那么就停止循环
2.假如用的线少于n(这里的n为3,匈牙利算法要求为n*n矩阵)就继续循环)。
C.对矩阵中的元素做变换,得到更多的0元素(1.找出未被线覆盖的所有元素中的最小值记为K。
2.未被线覆盖的所有的元素都减去K。
3.将红线交叉处的元素加上K)。)
5.所得到的结果就为最小匹配
如果想用匈牙利算法解决最大匹配问题,只需要将权重取反即可。