匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法。换句话说就是,在可以接受的时间内去做匹配。

1. 描述问题

给定2个集合A和B,然后将AB中的元素完成一个连线。(这不就是小时候的连线题么-_-)

匈牙利算法就是要找到两个集合促成最多的匹配对!最佳媒婆。这里最适合举的例子就是相亲会。集合A代表所有男嘉宾,集合B代表所有女嘉宾。每个男女嘉宾都有自己的心动嘉宾,此为重要前提。通过一个算法,完成最多的牵线。

互相有红线的代表互相心动,但不代表最终连线。这里的前提是,Hungarian算法只会匹配互相心动的对象。

最终获得的匹配是:

上面这篇博客完美解释的Hungarian算法的操作步骤:用递归回溯的方式更改匹配。但没从数学原理上解释。

这里完成最大匹配的逻辑是,先找一个小匹配(至少完成2对牵手的,并且有两对一的关系存在),然后通过M型交错路径的方法扩大匹配。

什么是M型交错路径?

如上图,红色粗线部分为小匹配,构成了一个M型的基本样子,通过M形状延申就可以获得更大的匹配。更新如下,粗线为更新后的匹配:

与上一步完全不一样,那么这么更新的逻辑是什么呢?答:M型

咱们展开来看,把右下角的点移动到左下角,就可以看得更清楚了:

匹配一直更新的逻辑是:M字母的阴面和阳面的交替!就是这样,粗线代表连接,细线代表

上面这个就是Hungarian算法的精髓了,这个步骤有个专业的名词:M交错路径的增广。

以上。

匈牙利算法java实现_匈牙利算法(Hungarian Algorithm)相关推荐

  1. l bfgs算法java代码_优化算法——拟牛顿法之L-BFGS算法

    一.BFGS算法 BFGS算法的校正公式: 利用Sherman-Morrison公式可对上式进行变换,得到 令 ,则得到: 二.BGFS算法存在的问题 在BFGS算法中.每次都要存储近似Hesse矩阵 ...

  2. 排序算法java快速排序_快速排序算法--Java实现

    标签(空格分隔): 数据结构与算法 原理: 对于任意一个无序数组,我们随机的选一个元素作为基准元素(例如:数组中的最后一个或者第一个元素, 然后我们将数组中的剩余元素分别与基准元素进行比较,将小于或等 ...

  3. 排序算法java源代码_排序算法汇总(java实现,附源代码)

    整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...

  4. 神经网络算法 java 源代码_神经网络算法与实现 ——基于Java语言 代码实例

    [实例简介] Neural Network Programming with Java_ ISBN 978-7-115-46093-6 [实例截图] [核心代码] NeuralNetworkProgr ...

  5. moead算法流程步骤_匈牙利算法原理与实现

    本文介绍了匈牙利算法的计算流程和代码实现,欢迎各位抛砖.原理部分正在整理中... 分配问题 分配问题涉及将机器分配给任务,将工人分配给工作,将足球运动员分配给职位等. 目标是确定最佳分配,例如,使总成 ...

  6. 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

  7. java 独木桥_趣味算法——青蛙过河(JAVA)

    青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...

  8. 蚁群算法java实现_蚁群算法java实现以及TSP问题蚁群算法求解

    1. 蚁群算法简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题 ...

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

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

最新文章

  1. monty python flying circus-巨蟒剧团之飞翔的马戏团 第一季
  2. css文字换行问题white-space:pre-line或者white-space:pre-wrap,解决word-wrap:break-word解决不了的...
  3. 一个设计错误导致的很那发现的错误
  4. CoderForces999D-Equalize the Remainders
  5. linux vim编辑
  6. 《Business Rules Engine Overview》--《业务规则引擎概述》write by Mark Kamoski
  7. 基于esp32的物联网设计
  8. 传智博客 JavaWeb方面的所有知识 听课记录 经典
  9. Failed to read schema document 'http://code.alibabatech.com/schema/dubbo/dubbo.xsd'问题解决方法
  10. 云计算 - 虚拟化技术Overview
  11. “时间都到哪里去了?”
  12. 应用程序连接hbase报错:java.net.SocketTimeoutException: callTimeout=60000
  13. Java ee 链接mysql 数据库完整步骤
  14. 2021年中国汽车电商行业发展回顾及未来发展趋势分析:随着汽车销量的增长,已成为汽车销售不可阻挡的趋势 [图]
  15. 由于不可抗力,这是我今年最后一篇博文了
  16. ST17H66低功耗蓝牙SOC开发(8)—— proprietary_rf工程讲解
  17. word超链接显示HYPERLINK
  18. Linux内核源码分析之内存管理
  19. 软件设计师——法律法规
  20. VH-HFCN based Parking Slot and Lane Markings Segmentation on Panoramic Surround View

热门文章

  1. VirtualBox虚拟机Ubuntu设置共享文件夹
  2. JS 正则表达式(数字、正则)
  3. html图片上传选择文件后的事件,bootstrap-fileinput插件,上传成功后事件
  4. linux 信号量semget,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  5. php mysql int string_php从mysql取出int数据,变成了string
  6. 查看oracle连接数的消耗情况
  7. python hist 参数_关于python中plthist参数的使用详解
  8. java字段不序列化注解_@Transient注解的使用(不被序列化和作为临时变量存储)...
  9. php preg match x,PHP的preg_match噩梦
  10. python编写一个登陆验证程序_python项目实战:实现验证码登录网址实例