Hungarian Algorithm匈牙利算法

匈牙利算法简介

匈牙利算法是一种在多项式时间内( O(n3) 求解任务分配问题的组合优化算法。它之所以被称作匈牙利算法,是因为算法很大一部分是基于以前匈牙利数学家的工作之上创建起来的。此后该算法被称为Kuhn–Munkres算法或Munkres分配算法(The Munkres Assignment Algorithm)。

接下来,我们将举例介绍这个算法。

问题的引入

首先,我们来考虑一个问题。

假设你是一个网络服务的供应商,你们可以免费给用户装Wi-Fi。现在呢,有三家用户要装Wi-Fi,同时,你有三个装Wi-Fi的工人在附近。



注:

  • Job —> 装Wi-Fi
  • Worker —> 工人

每个工人前往用户家装Wi-Fi需要一定开销(比如,油费,车费等等)。开销见下图。



用矩阵表示为



作为一个商人,你肯定想的是,要怎么分配可以最省钱呢?你会通过比较不同分配方案的开销,选择最省钱的那个作为分配方案。

注意:分配时,每个工人只安装一户人家的Wi-Fi。



对于每一个分配方案,我们都可以计算出它的总开销。在这个问题中,一共有6种分配方案,如下图所示。



我们最终选择总开销最小的方案,即第4个方案。最小总开销为70。



现在,找到了最小开销的分配方案,解决了问题。但你是不是觉得,这样算起来特别麻烦呢?

现在是一个 3×3 的矩阵, n=3 ,如果 n=100010000 呢?

一共要计算 n

  • 32
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值