返回顶部
首页 > 资讯 > 精选 >匈牙利算法是什么
  • 902
分享到

匈牙利算法是什么

2023-06-19 11:06:13 902人浏览 泡泡鱼
摘要

匈牙利算法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1 二分图二分图:又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V

匈牙利算法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

 

1 二分图

二分图:又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边   所关联的两个顶点i和j分别属于这两个不同的顶点集(i∈A, j∈B),则称图G为一个二分图。  

简单来说,如果图中所有顶点可以被分为两个集合,图中所有的边的头和尾不属于同一个顶点集合,而是跨越两个集合,则这个图是一个二分图。

例如:图1.1所示的图,无论如何划分顶点集合,也不能保证所有边的头和尾隶属于不同集合,因此,图1.1所示的图不是二分图。

匈牙利算法是什么  
图1.1

例如:图1.2所示的无向图:

匈牙利算法是什么  
图1.2

将顶点a,b,c,d作为集合A,将e,f,g,h作为集合B,将图1.2转化为图1.3所示:

匈牙利算法是什么  
图1.3

可以看出,图中顶点可以划分为A,B两个集合,而任意一条边的头和尾又分别隶属于集合A和集合B,因此,此图为二分图。

 

2 匹配

匹配:在图论中,一个匹配(matching)是指一个边的集合,其中任意两条边都没有公共顶点。
例如:图2.1中红色的边,可以为图1.3所示图的一个匹配。

匈牙利算法是什么  
图2.1
 

3 最大匹配

最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。图 3.1是一个最大匹配,它包含4条匹配边。

匈牙利算法是什么  
图3.1
 

4 完美匹配

完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。完美匹配一定是最大匹配(完美匹配的任何一个点都已经匹配,添加一条新的匹配边一定会与已有的匹配边冲突),但并非每个图都存在完美匹配。

 

5 交替路径

交替路径:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边…形成的路径称为交替路径。

 

6 增广路径

增广路径:从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路(agumenting path)。

增广路径性质:
    (1)P的路径长度必定为奇数,第一条边和最后一条边都不属于M,因为两个端点分属两个集合,且未匹配。
    (2)P经过取反操作可以得到一个更大的匹配M’。
    (3)M为G的最大匹配当且仅当不存在相对于M的增广路径。

 

7 匈牙利算法

匈牙利算法:利用增广路径求二分图的最大匹配算法称作匈牙利算法。(匈牙利数学家Edmonds于1965年提出)。
基本思想:通过寻找增广路径,把增广路径中的匹配边和非匹配边的相互交换,这样就会多出一条匹配边,直到找不到增广路径为止。

例如:以图2.1所示的二分图为例,使用匈牙利算法求解图的最大匹配。
(1)从顶点a出发,按照交替路径前进,第一个非匹配边为       ,到达顶点e,e为非匹配点,构成增广路径。令          为匹配边,顶点a,e为匹配顶点。    
   

匈牙利算法是什么  

(2)从顶点b出发,第一非匹配边为  ,到达顶点e,选择匹配边,到达a,选择非匹配边          ,g为非匹配点,找到一条增广路径。    
   
匈牙利算法是什么    

(3)交换增广路径中的匹配边与非匹配边,得到如下匹配。    
   
匈牙利算法是什么    

(4)从顶点c出发,第一非匹配边为,到达顶点e,然后按照交替路径前进,到达顶点b,无法继续前进。      
     
匈牙利算法是什么      

(5)从顶点c出发,选择第二条非匹配边。      
     
匈牙利算法是什么      

(6)从顶点d出发,选择非匹配边,到达顶点g,选择匹配边,到达顶点a,选择非匹配边到达顶点e,选择匹配边,到达顶部b,没有可以选择的边,且没有找到增广路径。          
         
匈牙利算法是什么          

(7)继续从顶点d出发,选择非匹配边,找到增广路径,将边变为匹配边,算法结束。
匈牙利算法是什么

8 结语

匈牙利算法多用于指派问题中,例如任务匹配问题。通过转化为二分图的形式,求解最大匹配,保证实现最优分配。


关于匈牙利算法是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网精选频道了解更多相关知识。

--结束END--

本文标题: 匈牙利算法是什么

本文链接: https://lsjlt.com/news/295787.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 匈牙利算法是什么
    匈牙利算法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 1 二分图二分图:又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V...
    99+
    2023-06-19
  • 详解C++实现匈牙利算法
    目录一、匈牙利算法介绍二、最大匹配问题三、最小点覆盖问题四、匈牙利算法的应用4.1、(洛谷P1129) [ZJOI2007]矩阵游戏4.2、(vijos1204) CoVH之柯南开锁...
    99+
    2024-04-02
  • C++ 匈牙利算法案例分析详解
    匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用...
    99+
    2024-04-02
  • jQuery如何使用匈牙利命名法
    这篇文章主要为大家展示了“jQuery如何使用匈牙利命名法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery如何使用匈牙利命名法”这篇文章吧。使用匈牙利...
    99+
    2024-04-02
  • C++ 函数命名的匈牙利式命名法
    匈牙利式命名法是一种 c++++ 命名约定,通过使用前缀(表示类型)和后缀(表示用途)来指定变量、函数和类型的类型信息。其优点包括可读性强、易于调试和维护。但缺点在于冗长、视觉杂乱和可能...
    99+
    2024-04-25
    c++ 匈牙利命名法 代码可读性
  • PHP 函数命名是否应该使用匈牙利命名法?
    否,不建议使用匈牙利命名法。虽然它可以提高可读性,但会造成代码冗余、降低可维护性,且与现代编程语言的清晰简洁风格相违背。替代方案包括使用有意义的名称、类型提示和文档注释。 PHP 函数...
    99+
    2024-04-20
    php 命名规范
  • 匈牙利表示法在 C++ 函数命名中的利弊分析
    匈牙利表示法是一种 c++++ 函数命名约定,通过前缀指示数据类型,提高可读性、减少错误、增强维护性,但会延长函数名称、增加维护难度,可能与某些风格指南冲突。 匈牙利表示法:C++ 函...
    99+
    2024-05-03
    c++ 函数命名 匈牙利表示法
  • C++ 函数命名:匈牙利表示法与命名规范的比较
    c++++ 函数命名惯例对比:匈牙利表示法和命名规范。匈牙利表示法通过变量名前缀表示类型,增强可读性但冗长;命名规范使用更简洁的名称,提高可读性。匈牙利表示法强制执行类型检查,提高维护性...
    99+
    2024-05-04
    命名规范 匈牙利表示法 c++
  • 电脑蓝牙连接的方法是什么
    电脑蓝牙连接的方法有以下几种:1. 打开电脑的蓝牙功能:在电脑的设置中找到蓝牙选项,打开蓝牙开关。2. 找到要连接的蓝牙设备:在电脑...
    99+
    2023-09-11
    电脑
  • 什么是java算法
    什么是java算法 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。算法的特征:输入性:有零个或多个外部量作为算法的输入输出性:算法产生至少一个量作为输出确定性:...
    99+
    2016-09-25
    java入门 java 算法
  • RSA算法是什么
    今天就跟大家聊聊有关RSA算法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。2. 加密算法的一点历史我们知道常见的加密算法有:对称加密和非对称...
    99+
    2024-04-02
  • android蓝牙简单开发的方法是什么
    本篇内容介绍了“android蓝牙简单开发的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概述前段时间学习了一些蓝牙开发的知识,记...
    99+
    2023-06-21
  • 什么是近似算法
    这篇文章主要介绍“什么是近似算法”,在日常操作中,相信很多人在什么是近似算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是近似算法”的疑惑有所帮助!接下来,请跟着小编一...
    99+
    2024-04-02
  • 什么是分支算法
    这篇文章主要介绍“什么是分支算法”,在日常操作中,相信很多人在什么是分支算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是分支算法”的疑惑有所帮助!接下来,请跟着小编一...
    99+
    2024-04-02
  • 什么是递归算法
    这篇文章主要介绍“什么是递归算法”,在日常操作中,相信很多人在什么是递归算法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是递归算法”的疑惑有所帮助!接下来,请跟着小编一...
    99+
    2024-04-02
  • 贪心算法是什么
    本篇文章给大家分享的是有关贪心算法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1 概念贪心的意思在于在作出选择时,每次都要选择对自身最为有利的结果,保证自身利益的最大化...
    99+
    2023-06-19
  • Windows和Laravel:为什么它们是Java编程算法的利器?
    作为一名Java编程爱好者,你可能会问:为什么要关注Windows和Laravel呢?事实上,这两个工具在Java编程算法中的地位是非常重要的。在本文中,我们将深入探讨Windows和Laravel在Java编程中的优势和应用。 一、Win...
    99+
    2023-10-14
    windows 编程算法 laravel
  • React中diff算法是什么
    这篇文章主要介绍了React中diff算法是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。React中diff算法的理解diff算法用来计算出Virtual DOM中改变...
    99+
    2023-06-15
  • 什么是AES加密算法
    AES加密算法(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,由美国国家标准与技术研究...
    99+
    2023-09-20
    AES
  • CIDR计算方法是什么
    CIDR(Classless Inter-Domain Routing)是一种用于将IP地址划分为不同的子网的方法,它不依赖于传统的...
    99+
    2023-10-23
    CIDR
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作