匈牙利算法(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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!