匈牙利算法(Hungarian Algorithm)是一种用来解决**"最佳分配问题"的数学方法。它的核心任务是:"如何用最低成本,把N个任务分配给N个人,让总成本最小?"**(或者反过来,让收益最大)。
假设有:
| 订单1 | 订单2 | 订单3 | |
|---|---|---|---|
| A | 5元 | 8元 | 6元 | 
| B | 4元 | 7元 | 10元 | 
| C | 3元 | 9元 | 8元 | 
目标:怎么分配订单,让总配送成本最低?
每行减去最小值(让每行至少有一个0):
[0, 3, 1][0, 3, 6][0, 6, 5]新表格:
| 订单1 | 订单2 | 订单3 | |
|---|---|---|---|
| A | 0 | 3 | 1 | 
| B | 0 | 3 | 6 | 
| C | 0 | 6 | 5 | 
每列减去最小值(让每列也至少有一个0):
[0, 0, 0](不用减)[0, 0, 3][0, 5, 4]新表格:
| 订单1 | 订单2 | 订单3 | |
|---|---|---|---|
| A | 0 | 0 | 0 | 
| B | 0 | 0 | 5 | 
| C | 0 | 3 | 4 | 
用最少的线覆盖所有0(横线或竖线):
调整数字,创造新的0:
| 订单1 | 订单2 | 订单3 | |
|---|---|---|---|
| A | 3 | 0 | 0 | 
| B | 0 | 0 | 2 | 
| C | 0 | 3 | 1 | 
重新画线覆盖0:
匈牙利算法就像**"相亲配对"**:
简单来说,匈牙利算法就是"用数学帮你做最划算的决策"!


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!