匈牙利算法

匈牙利算法

我们考虑一种情况,四个工作(J1, J2, J3, J4)需要四个工人(W1, W2, W3, W4)来完成,一个工作由一个工人完成。每个工人完成每个工作的成本矩阵如下。最终目标是最小化分配的总成本。

接下来通过这个例子解释匈牙利算法。

步骤1:减去行中的最小值

我们将每一行减去该行中的最小值。比如第一行中的最小值就是69。因此第一行的所有元素都要减去69,最后的结果矩阵如下:

步骤2:减去列中最小值

同样的,每一列减去该列中的最小值,得到以下矩阵:

(注意前三列中各自的最小值都是0,因此不变)

步骤3:用最少的线覆盖所有的0

我们用最少的线(水平或者垂直)覆盖矩阵中所有的0。可以用3条线覆盖所有的0。

因为按照要求得到的线的数量是3,小于矩阵的大小(n=4),我们继续步骤4。

步骤4:创建额外的0

首先,我们发现未覆盖的最小值是6。将步骤3得到的矩阵中未覆盖的元素都减去6,覆盖两次的元素(12和90)加上6,得到以下矩阵:

然后返回步骤3。

步骤3:用最少的线覆盖所有的0

再次,我们用最少的线覆盖矩阵中所有的0,现在满足条件的有4条线。

因为满足条件的线数等于矩阵的大小(n=4),矩阵的所有0存在最优分配,结束算法。

最优分配

以下的0表示最优分配:

对应的原始成本矩阵中的最优分配:

因此,工人1完成工作3,工人2完成工作2,工人3完成工作1,工人4完成工作4。

[原文链接:http://www.hungarianalgorithm.com/examplehungarianalgorithm.php]
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值