本文介绍了匈牙利算法的计算流程和代码实现,欢迎各位抛砖。原理部分正在整理中...

分配问题

分配问题涉及将机器分配给任务,将工人分配给工作,将足球运动员分配给职位等。 目标是确定最佳分配,例如,使总成本最小化或使团队效率最大化。 分配问题是组合优化领域中的一个基本问题。

例如,假设我们有四个工作需要由四个工作人员执行。 因为每个工人都有不同的技能,所以执行工作所需的时间取决于分配给它的工人。

下面的矩阵显示了工人和工作的每种组合所需的时间(以分钟为单位)。 作业用J1,J2,J3和J4表示,工人用W1,W2,W3和W4表示。

每个工人应仅执行一项工作,目标是最大程度地减少执行所有工作所需的总时间。

事实证明,将工人1分配给作业3,将工人2分配给作业2,将工人3分配给作业1,将工人4分配给作业4是最佳选择。总时间为69 + 37 + 11 + 23 = 140分钟。 所有其他任务导致需要更多时间。

匈牙利算法可用于找到此最佳分配。

匈牙利算法

匈牙利算法是一种易于理解且易于使用的算法,可以解决分配问题。匈牙利算法包括以下四个步骤。前两个步骤执行一次,而步骤3和4重复执行,直到找到最佳分配。该算法的输入是仅包含非负元素n×n方阵

  • 步骤1:减去行最小值

    • 对于每一行,找到最低的元素,然后从该行的每个元素中减去它。
  • 步骤2:减去列最小值
    • 同样,对于每一列,找到最低的元素,然后从该列的每个元素中减去它。
  • 步骤3:用最少的行数覆盖所有零
    • 使用最少数量的水平和垂直线覆盖结果矩阵中的所有零。如果需要n行,则零之间存在最佳分配。算法停止。
    • 如果少于n行,请继续执行步骤4。
  • 步骤4:生成额外的零
    • 在步骤3中找到一条线未覆盖的最小元素(称为k)。从所有未发现的元素中减去k,然后将k添加到所有覆盖两次的元素中。

代码实现

sklearn里的linear_assignment()函数以及scipy里的linear_sum_assignment()函数都实现了匈牙利算法,两者的返回值的形式不同:

import 

参考

An Assignment Problem solved using the Hungarian Algorithm​www.hungarianalgorithm.com求索:目标跟踪初探(DeepSORT)​zhuanlan.zhihu.com

moead算法流程步骤_匈牙利算法原理与实现相关推荐

  1. 匈牙利算法java实现_匈牙利算法(Hungarian Algorithm)

    匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法.换句话说就是,在可以接受的时间内去做匹配. 1. 描述问题 给定2个集合A和B,然后将AB中的元素完成一个连线.(这不就是小时候的连线题么 ...

  2. moead算法流程步骤_数据聚类(一)常见聚类算法的基本原理[图解]

    文章整理了五种常见聚类算法的基本原理,通过简易图解的形式对算法原理进行形象化的描述,同时给出了算法的实现流程和数学表达.全文约4192字. 相关名词的英文翻译 监督学习Supervised Learn ...

  3. moead算法流程步骤_算法——抓住程序的灵魂

    做任何事情都要有一定的步骤,为了解决一个问题而采取的方法和步骤就称为算法.C语言的算法是计算机算法,即计算机能够执行的算法.只有明确了算法后,才能使应用程序实现某些功能.所以,通常人们会将算法称为程序 ...

  4. AcWing 861. 二分图的最大匹配(Java)_匈牙利算法

    二分图的最大匹配 ①. 题目 ②. 思路 ③. 学习点 ④. 代码实现 原题链接 ①. 题目 ②. 思路 匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点. 最大匹配:一个图所 ...

  5. 算法讲解 -- 二分图之 匈牙利算法

    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...

  6. 分类算法python程序_分类算法——k最近邻算法(Python实现)(文末附工程源代码)...

    kNN算法原理 k最近邻(k-Nearest Neighbor)算法是比较简单的机器学习算法.它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本在特征空间中的k个最近邻(最相似)的样 ...

  7. java贪心算法 区间调度_贪心算法-区间调度问题解之证明(示例代码)

    一.贪心算法 定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化. 二.区间调度问题 1. 问题:我们有一组需求{1,2,3 ...

  8. 算法的优缺点_机器学习算法优缺点 amp; 如何选择

    (点击上方公众号,可快速关注) 转自: 算法与数学之美 主要回顾下几个常用算法的适应场景及其优缺点! 机器学习算法太多了,分类.回归.聚类.推荐.图像识别领域等等,要想找到一个合适算法真的不容易,所以 ...

  9. labuladong 的算法小抄_关于算法笔试的几个套路,一点就透

    以下文章来源于labuladong ,作者labuladong 我知道各位是被标题吸引进来的,那就不废话,先说几个算法笔试的硬核套路,再说说语言选择和做题复习的策略. 避实就虚 大家也知道,大部分笔试 ...

最新文章

  1. 使用JS/Jquery获得父窗口的几个方法(笔记)
  2. 【震惊】史上最牛的市场推广/营销
  3. 财付通接口(asp)
  4. .NET平台开源项目速览(12)哈希算法集合类库HashLib
  5. 禁止i5笔记本按Ctrl+Alt+向下键翻转屏幕
  6. php简单验证码实例,php结合GD库简单实现验证码的示例代码
  7. fiddler 页面介绍
  8. 沧小海笔记之PCIE协议解析——第一章 PCIE概述(下)
  9. 魔兽世界私服Trinity,从源码开始
  10. Windows NT 内核基本结构
  11. 考研英语七附双语阅读:编程玩具——程序员培养从娃娃抓起
  12. signature=89d6821c2fe7d31483f21edf9c96c63b,Forage harvester
  13. 【游戏后端】游戏服务器端开发的一些建议(转载)
  14. $watch和watch属性的使用
  15. 职场打工人快看过来,一分钟教会你PDF转Word后怎么编辑
  16. 离散傅里叶变换 (DFT)、快速傅里叶变换 (FFT)
  17. Facebook最新Libra币开发指南---接口服务器开发
  18. UVA 10242 Fourth Point
  19. 构建U盘启动的嵌入式linux
  20. WebBrowser中打开新页面

热门文章

  1. mql 查询多结果_明世告诉你!广东成考成绩、录取结果怎么查?(附最低分数线)...
  2. 关闭mysql权限管理_MySQL系列:用户及权限管理
  3. Java 蓝桥杯 完美的代价
  4. Python wxpy通过ModBus控制电脑鼠标和键盘
  5. layui数据可视化_空间数据可视化 GEOM
  6. strace监视系统调用
  7. JS里的居民们5-数组(栈)
  8. 使用Maven把项目打包成可执行jar在Idea里
  9. 使用命令行编译Less源文件
  10. sharepoint_study_5