首页 > 编程语言 >【算法学习】匈牙利算法

【算法学习】匈牙利算法

时间:2022-10-05 16:22:25浏览次数:88  
标签:匹配 增广 匈牙利 路径 二部 学习 算法

匈牙利算法

在这里插入图片描述

一、历史

匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,广泛应用在运筹学领域, 美国数学家哈罗德·库恩于1955年提出该算法,之所以被称作匈牙利算法是因为算法很大一部分是基于以前匈牙利数学家Dénes Kőnig(1884-1944)和Jenő Egerváry(1891-1958)的工作上创建起来的。

Kuhn H W. The Hungarian method for the assignment problem[J]. Naval research logistics quarterly, 1955, 2(1‐2): 83-97.

原文链接:https://blog.csdn.net/lx_ros/article/details/123980953

二、相关概念

1. 二部图 Bigraph, Bipartite graph

  • 二部图(Bipartite graph)是一类特殊的图,也称二分图,
    它可以被划分为两个部分,每个部分内的点互不相连。上图是典型的二分图;

  • 二分图是图论中的一种特殊模型。若能将无向图G=(V,E)的顶点V划分为两个交集为空的顶点集,并且任意边的两个端点都分属于两个集合,则称图G为一个为二分图。


2. 匹配 Matching

  • 匹配边、非匹配边和非匹配点;
  • 匹配的两个重点:(1) 匹配是边的集合;在该集合中,(2) 任意两条边不能有共同的顶点。

3. 最大匹配 Maximum Matching

  • 选择这样的边数最大的子集称为图的最大匹配问题;
  • 最大匹配的边数称为最大匹配数。

4. 完全匹配

  • 如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配;

5. 最优匹配

  • 又称为带权最大匹配,是指在带有权值边的二分图中,求一个匹配使得匹配边上的权值和最大;
  • 一般X和Y集合顶点个数相同,最优匹配也是一个完备匹配,即每个顶点都被匹配。如果个数不相等,可以通过补点加0边实现转化。一般使用KM算法解决该问题。

img

6. 交错路径

  • M是二部图G的一个匹配,G的一条M交错路径是指,其边在M和E(G)-M中交替出现的路径,即从未匹配点出发,依次经过未匹配的边和已匹配的边,即为交替路,如{e2, e7},则{e1, e2, e6, e7}就是一条交错路径

7. 增广路径

  • 在二分图的匹配中,如果一条路径的首尾是非匹配点,路径中除此之外(如果有)其他的点均是匹配点,那么这条路径就是一条增广路径(Agumenting path),从定义可知增广路径是一种特殊的交错路径。结合上面的图可知{e1, e6}是匹配时,{e7, e6, e2 ,e1 ,e3}是一条增广路径。

  • 基于上述术语引出Hall定理,图G中的一个匹配M是最大匹配的充分必要条件是G中不存在M的增广路径。证明可参考

  • 增广路径的首尾是非匹配点。因此,增广路径的第一条和最后一条边,必然是非匹配边;由交错路径的定义可知,增广路径从非匹配边开始,匹配边和非匹配边依次交替,最后由非匹配边结束。这样一来,增广路径中非匹配边的数目总比匹配边大 1。

  • 考虑置换增广路径中的匹配边和非匹配边,由于增广路径的首尾是非匹配点,其余则是匹配点,这样的置换不会影响原匹配中其他的匹配边和匹配点,因而不会破坏匹配;而增广路径的置换,可使匹配的边数加1,得到比原有匹配更大的匹配。

  • 由于二分图的最大匹配必然存在(比如,上限是包含所有顶点的完全匹配),所以,在任意匹配的基础上,如果有办法不断地搜寻出增广路径,直到最终我们找不到新的增广路径为止,就有可能得到二分图的一个最大匹配。匈牙利算法正是基于这种思想来实现的

  • 二部图的最大匹配可分成有权二部图和无权二部图,无权二部图的实例表示如宠物匹配,有权二部图实例如任务指派。无权二部图的最大匹配不能使用贪心算法,可以使用网络流问题来进行求解。

  • 有权二部图满足约束条件后可使用匈牙利算法来求最大匹配,两边的结点相同∣U∣ = ∣V∣ = n ,匈牙利算法的时间复杂度为 O(n^3).

三、在线工具及参考资料

标签:匹配,增广,匈牙利,路径,二部,学习,算法
From: https://www.cnblogs.com/KangYiming/p/16755768.html

相关文章

  • Vue学习(二)
    vue检测数据的原理数组的常用方法:push,pop,shift,unshift,splice,sort,reverse.原理就是setter,vue生成每个属性的setter,递归生成所有的getter,setter.vue.set()的......
  • 栈的应用----中缀表达式转后缀表达式的算法
    前提一个中缀表达式可以对应多个后缀表达式,机器算法得出的是性质最好的左优先的后缀表示式。 算法核心思想1、一切过程皆是数据。2、一个中缀表达式的操作数,左右两边......
  • 黑豹招聘|SLAM、三维视觉算法工程师等岗位(校招/社招/实习)
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。公司介绍陕西黑豹高科技术有限公司是一家军民融合企业,专注于移动视觉感知,实......
  • 梅卡曼德招聘|3D视觉、机器人算法、相机软件工程师等多岗位
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。岗位汇总3D视觉算法工程师立体视觉算法工程师深度学习算法工程师机器人算法......
  • 三星招聘|计算机视觉和机器学习、视觉算法工程师(校招/社招/实习)
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。三星电子中国研究院招聘信息公司介绍:三星电子中国研究院是三星电子在华投资......
  • MYSQL学习之数据库设计三范式
    (一)什么是设计库设计范式?  数据库表的设计依据,从而进行数据表的设计。(二)范式内容I.第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分。II.第二范式:建立在第一范......
  • GDB及Makefile学习
    GDB(1)下载安装gdb:sudoapt-getinstallgdb(2)启动gdbgdbtest(3)启动后界面如下:参考老师所给ppt内容我们可以输入(gdb)l列出文件的代码清单·(gdb)b1.函数......
  • Empire Breakout学习体会
    申明:本文为靶机EMPIRE:BREAKOUT学习笔记,相关操作仅在测试环境中进行,严禁任何危害网络安全的恶意行为。本文主要记录了一些关键知识点,仅供学习!一、安装说明靶机在https://ww......
  • 月薪20k-50k| 西人马3D机器视觉算法、语音识别、DSP软件工程师招聘
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。公司简介:西人马FATRI是一家IDM模式的芯片公司,致力于为民用航空、能源、轨......
  • 瓦特曼招聘|激光SLAM、三维重建算法工程师等岗位(校招/社招/实习)
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。公司介绍北京瓦特曼智能科技有限公司是一家行业领先的人工智能科技公司。公......