我的编程空间,编程开发者的网络收藏夹
学习永远不晚

匈牙利算法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

匈牙利算法是什么

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

 

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 结语

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


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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

匈牙利算法是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

匈牙利算法是什么

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

C++ 函数命名的匈牙利式命名法

匈牙利式命名法是一种 c++++ 命名约定,通过使用前缀(表示类型)和后缀(表示用途)来指定变量、函数和类型的类型信息。其优点包括可读性强、易于调试和维护。但缺点在于冗长、视觉杂乱和可能模棱两可,因此需要谨慎使用。C++ 函数命名的匈牙利式
C++ 函数命名的匈牙利式命名法
2024-04-25

PHP 函数命名是否应该使用匈牙利命名法?

否,不建议使用匈牙利命名法。虽然它可以提高可读性,但会造成代码冗余、降低可维护性,且与现代编程语言的清晰简洁风格相违背。替代方案包括使用有意义的名称、类型提示和文档注释。PHP 函数命名:应该使用匈牙利命名法吗?简介匈牙利命名法是一种命
PHP 函数命名是否应该使用匈牙利命名法?
2024-04-20

匈牙利表示法在 C++ 函数命名中的利弊分析

匈牙利表示法是一种 c++++ 函数命名约定,通过前缀指示数据类型,提高可读性、减少错误、增强维护性,但会延长函数名称、增加维护难度,可能与某些风格指南冲突。匈牙利表示法:C++ 函数命名的利弊简介匈牙利表示法是一种命名约定,用于在 C
匈牙利表示法在 C++ 函数命名中的利弊分析
2024-05-03

C++ 函数命名:匈牙利表示法与命名规范的比较

c++++ 函数命名惯例对比:匈牙利表示法和命名规范。匈牙利表示法通过变量名前缀表示类型,增强可读性但冗长;命名规范使用更简洁的名称,提高可读性。匈牙利表示法强制执行类型检查,提高维护性但可能混乱;命名规范更灵活。匈牙利表示法具有更好的可重
C++ 函数命名:匈牙利表示法与命名规范的比较
2024-05-04

电脑蓝牙连接的方法是什么

电脑蓝牙连接的方法有以下几种:1. 打开电脑的蓝牙功能:在电脑的设置中找到蓝牙选项,打开蓝牙开关。2. 找到要连接的蓝牙设备:在电脑蓝牙设置界面中,点击“添加设备”或者“搜索设备”按钮,电脑会开始扫描附近的蓝牙设备。3. 配对蓝牙设备:当蓝
2023-09-11

什么是算法?

算法是计算机解决问题的步骤序列,具有有限性、输入/输出、确定性、有效性的特征。常见类型包括搜索、排序、优化算法等。算法复杂度衡量其时间或内存需求,常见类包括O(1)、O(logn)和O(n^2)。算法在计算机科学中至关重要,用于优化性能、解决复杂问题并促进理论与实践联系。广泛应用于人工智能、商业、科学、游戏开发等领域。
什么是算法?
2024-04-02

android蓝牙简单开发的方法是什么

本篇内容介绍了“android蓝牙简单开发的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!概述前段时间学习了一些蓝牙开发的知识,记
2023-06-21

什么是java算法

什么是java算法 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,java算法就是采用Java语言来实现解决某一问题的清晰指令。算法的特征:输入性:有零个或多个外部量作为算法的输入输出性:算法产生至少一个量作为输出确定性:算法中每条指令清晰,
什么是java算法
2016-09-25

贪心算法是什么

本篇文章给大家分享的是有关贪心算法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1 概念贪心的意思在于在作出选择时,每次都要选择对自身最为有利的结果,保证自身利益的最大化
2023-06-19

React中diff算法是什么

这篇文章主要介绍了React中diff算法是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。React中diff算法的理解diff算法用来计算出Virtual DOM中改变
2023-06-15

什么是AES加密算法

AES加密算法(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,由美国国家标准与技术研究院(NIST)于2001年发布,用于替代早期的数据加密标准(DES)。AES算法使用的密钥长度可以是128位
2023-09-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录