位置: IT常识 - 正文

(二)匈牙利算法简介(匈牙利算法的实现原理)

编辑:rootadmin
(二)匈牙利算法简介 1.历史

推荐整理分享(二)匈牙利算法简介(匈牙利算法的实现原理),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:匈牙利算法优缺点,匈牙利算法图解过程,匈牙利算法详解,匈牙利算法优缺点,匈牙利算法图解过程,匈牙利算法流程图,匈牙利算法图解过程,匈牙利算法详解,内容如对您有帮助,希望把文章链接给更多的朋友!

匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,广泛应用在运筹学领域, 美国数学家哈罗德·库恩于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.

2.指派问题

匈牙利算法被用来求解任务分配问题,也叫指派问题,即n项任务,对应分配给n个人去做,应该由哪个人来完成哪项任务,能够使完成效率最高。

基于上图中的指派问题模型,匈牙利算法求解指派问题时的条件是,1)目标函数最小 2)人和任务数相同 3)效率非负,根据目标函数: minZ=∑i∑jcijxijmin Z = \sum_{i} \sum_{j} c_{ij}x_{ij}minZ=i∑​j∑​cij​xij​ 匈牙利算法的目标,就是在变换系数矩阵中找到n个不同行不同列的0元素,以求解指派问题最优解。

现在借用一个例子来说明匈牙利算法的步骤。由一份说明书需要翻译成ABCD四种语言,现有甲乙丙丁四人去做四种语言的翻译所需要的时间见下表,需要求得的是如何指派任务使完成翻译工作需要的工时最少。

步骤1:系数矩阵在每行列上减去对应行列中的最小值,使各行各列都出现0元素

步骤2:试寻找指派最优解

步骤3:经过步骤2,第4行依然没有0元素,也就是丙这个人当前没有任务去做,第3步即增加矩阵中的0元素,给丙分配任务

步骤4:重复步骤2、3,直到找到n个位于不同行不同列的0元素,即最优解

最优解:

即最优方案为甲翻译D,乙翻译A,丙翻译B,丁翻译C

3.二部图与匈牙利算法(二)匈牙利算法简介(匈牙利算法的实现原理)

二部图(Bigraph, Bipartite graph)也被称做二分图,是一种特殊的图,其顶点可以分成两个不相交的集合(U和V),并且同属一个集合内的点两两不相连(EU=EV=ϕE_U=E_V=\phiEU​=EV​=ϕ,也就是说二分图中如有圈,则圈所包含的边的数量必定是偶数。

匹配:匹配(M)是定义为二部图中边的集合M⊂EM \subset EM⊂E且其中任意两条边不共点即∀e1,e2∈M,s.t.e1∩e2=ϕ\forall e_1,e_2\in M,s.t. e_1 \cap e_2 = \phi∀e1​,e2​∈M,s.t.e1​∩e2​=ϕ

上图中红色的边{e1,e6e_1,e_6e1​,e6​}组成的集合就是1个匹配,其他还可以定义各种匹配如{e5e_5e5​}、{e2e_2e2​,e5e_5e5​}等,这些红色的边被称为匹配边,匹配边所连接的点被称为匹配点。同样可以定义非匹配边和非匹配点。

如果二分图里的某一个匹配包含的边的数量,在该二分图的所有匹配中最大,那么这个匹配称为最大匹配(Maximum Matching)

如上图就是1个最大匹配{e2,e3,e5,e7e_2,e_3,e_5,e_7e2​,e3​,e5​,e7​}

交错路径:M是二部图G的一个匹配,G的一条M交错路径是指,其边在M和E(G)-M中交替出现的路径,如{e2,e7e_2,e_7e2​,e7​}是一个匹配,则{e1,e2,e6,e7e_1,e_2,e_6,e_7e1​,e2​,e6​,e7​}就是一条交错路径。

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

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

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

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

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

二部图的最大匹配可分成有权二部图和无权二部图,无权二部图的实例表示如宠物匹配,有权二部图实例如任务指派。

无权二部图的最大匹配不能使用贪心算法,可以使用**网络流问题**来进行求解。

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

4.在线工具及代码实现可以输入系数矩阵,在线使用匈牙利算法来求解任务分配问题的一个网站匈牙利算法的C++实现

1.https://www.bilibili.com/video/BV1hF411h7eX?spm_id_from=333.337.search-card.all.click 2.https://zh.wikipedia.org/wiki/%E5%8C%88%E7%89%99%E5%88%A9%E7%AE%97%E6%B3%95 3.https://www.zhihu.com/question/313845998 4.https://liam.page/2016/04/03/Hungarian-algorithm-in-the-maximum-matching-problem-of-bigraph/?utm_source=wechat_session&utm_medium=social&utm_oi=574981213526167552 5.https://www.youtube.com/watch?v=6DFWUgV5Osc&ab_channel=ShusenWang

本文链接地址:https://www.jiuchutong.com/zhishi/297871.html 转载请保留说明!

上一篇:VSCode 入门操作大全 + 实用插件推荐【零基础专属详细教程】(vscode入门视频)

下一篇:[ChatGPT] 从 GPT-3.5 到 GPT-5 的进化之路 | ChatGPT和程序员 : 协作 or 取代

  • 拼多多免单全额返是真的么(拼多多免单全额返微信零钱)

    拼多多免单全额返是真的么(拼多多免单全额返微信零钱)

  • 苹果充电线第四个触点发黑怎么办(苹果充电线第四条变黑)

    苹果充电线第四个触点发黑怎么办(苹果充电线第四条变黑)

  • 苹果手机通讯录出现重复联系人怎么办(苹果手机通讯录怎么导入到新手机)

    苹果手机通讯录出现重复联系人怎么办(苹果手机通讯录怎么导入到新手机)

  • 腾讯课堂麦克风打不开(腾讯课堂麦克风权限设置)

    腾讯课堂麦克风打不开(腾讯课堂麦克风权限设置)

  • 苹果XR用流量上网慢(xr显示流量)

    苹果XR用流量上网慢(xr显示流量)

  • 抖音直播可以播放电影吗(抖音直播可以播游戏吗)

    抖音直播可以播放电影吗(抖音直播可以播游戏吗)

  • 苹果x有没有3d按压(苹果x有3d按压功能吗)

    苹果x有没有3d按压(苹果x有3d按压功能吗)

  • 网易云音乐怎样搜电台(网易云音乐怎样下载到本地)

    网易云音乐怎样搜电台(网易云音乐怎样下载到本地)

  • 手机上怎么注销etc(手机上怎么注销宽带业务)

    手机上怎么注销etc(手机上怎么注销宽带业务)

  • 京东怎么恢复货到付款(怎样恢复京东)

    京东怎么恢复货到付款(怎样恢复京东)

  • 苹果6s支持volte吗(苹果6S支持PD快充吗)

    苹果6s支持volte吗(苹果6S支持PD快充吗)

  • 退群了发的消息还在吗(退群了发的消息能看到吗)

    退群了发的消息还在吗(退群了发的消息能看到吗)

  • 主板的硬盘接口类型(主板的硬盘接口在哪)

    主板的硬盘接口类型(主板的硬盘接口在哪)

  • 人工分页符是硬分页符吗(人工分页符会随文章)

    人工分页符是硬分页符吗(人工分页符会随文章)

  • 多媒体系统一般是(多媒体系统主要有哪些设备)

    多媒体系统一般是(多媒体系统主要有哪些设备)

  • 微信电话显示对方忙是为什么(微信电话显示对方没有添加你为朋友)

    微信电话显示对方忙是为什么(微信电话显示对方没有添加你为朋友)

  • 微信收款二维码怎么弄(微信收款二维码怎么保存到相册)

    微信收款二维码怎么弄(微信收款二维码怎么保存到相册)

  • win10休眠按哪个键唤醒(won10休眠)

    win10休眠按哪个键唤醒(won10休眠)

  • 表格递减是升序还是降序(excel中递减是升序还是降序)

    表格递减是升序还是降序(excel中递减是升序还是降序)

  • ipad文件夹在哪里找(iPad文件夹在哪)

    ipad文件夹在哪里找(iPad文件夹在哪)

  • 荣耀9x出厂带钢化膜吗(荣耀9x原机是钢化膜吗)

    荣耀9x出厂带钢化膜吗(荣耀9x原机是钢化膜吗)

  • 蓝牙耳机双耳怎么连接(蓝牙耳机双耳怎么配对)

    蓝牙耳机双耳怎么连接(蓝牙耳机双耳怎么配对)

  • 苹果可以复制门禁卡吗(苹果可以复制门禁卡信息吗)

    苹果可以复制门禁卡吗(苹果可以复制门禁卡信息吗)

  • dub-al00a是华为什么型号(dubal00a是华为什么型号多少钱)

    dub-al00a是华为什么型号(dubal00a是华为什么型号多少钱)

  • 微软官方教你如何绕过Win11 TPM和CPU检查(微软官方教你如何验机)

    微软官方教你如何绕过Win11 TPM和CPU检查(微软官方教你如何验机)

  • 温尼伯湖沿岸的春日冰雪,曼尼托巴 (© Mike Grandmaison/Jaynes Gallery/DanitaDelimont.com)(温尼伯湖成因)

    温尼伯湖沿岸的春日冰雪,曼尼托巴 (© Mike Grandmaison/Jaynes Gallery/DanitaDelimont.com)(温尼伯湖成因)

  • 使用 JavaScript 的响应式计数器动画(javascript怎么用)

    使用 JavaScript 的响应式计数器动画(javascript怎么用)

  • 接受固定资产投资的增值税计入哪里
  • 计提生产应税产品的分录
  • 金税盘开票软件密码忘记怎么办
  • 城市维护建设税怎么做分录
  • 代扣个税怎么做凭证
  • 增值税即征即退怎么计算
  • 交通事故的支出是否可以个税税前扣除
  • 电子发票可以更改备注吗
  • 工程结算与工程施工如何结转
  • 采购部付款申请单和财务付款流程
  • 已经发出的商品怎么修改
  • 发生的成本作为存货处理
  • 销项负数发票的抵扣联
  • 合伙制公司有董事会吗
  • 计提的增值税比例怎么算
  • 机器设备进项税额是否要分期抵扣
  • 一般纳税人收到普票如何入账
  • 权益性投资损失包括哪些
  • 发票冲红还需要作废吗
  • 注册资本变更需要去税务局吗
  • 普票的销项可以抵扣吗?
  • 二手房个人所得税和增值税
  • 关于设备延期交付说明
  • 合并报表实操视频
  • 鸿蒙系统大文件夹怎么调节大小
  • bios中如何关闭cd/dvd
  • 任务栏图标调大了怎么办
  • php开发用什么ide
  • 收购后的固定资产如何入账
  • 公司收到款后怎么做账
  • 小规模纳税人销售货物税率是多少
  • 定额征收怎么交税
  • 增值税专票如何查询对方是否抵扣
  • 委托出口的会计分录
  • 股权转让企业所得税怎么算
  • 收取的延期付款利息会计调账处理
  • php guzzle 异步
  • css选择器权重
  • php 短信验证码
  • 商业企业退货与退款区别
  • dpkg命令详解
  • 营业收入和利润总额的关系
  • 企业增值税发票管理办法
  • 个人社保进费用,还要报个税么
  • 现金发放工资会计科目怎么写
  • 网上打印出来的手机买卖协议有效吗
  • 专用发票超过360天未认证
  • 所得税季初季末怎么填
  • 个税返还手续费怎么做账
  • sql扩展
  • 盈利能力还有什么能力
  • 没有购销合同的销售额交印花税吗
  • 甲企业持有乙企业40%的股权,能够对乙企业
  • 失控发票进项税额结转成本
  • 出口退税后发生退货补缴怎么算增值税
  • 母子公司可以合并吗
  • 建筑工程劳务分包,工伤责任承担
  • 营改增后进项税额转出
  • 购买办公室家具
  • 企业注销时实收资本清算时要作资产处置收益交所得税吗
  • 注册资本实缴制改为认缴制
  • 车属于固定资产嘛
  • win7双击文件无反应
  • linux三个主要部分及功能
  • vim如何操作
  • windows英文字体
  • win7系统怎么更改桌面图标大小
  • linux怎么配置vim
  • win10 自带
  • win7如何禁用网卡
  • linux mv命令的用法
  • 计算机图形学和计算机视觉的区别
  • python的入门教程
  • 批处理/l
  • js正则匹配特殊符号
  • context和getApplicationContext()介绍
  • unity3d文件怎么查看和修改
  • python socks
  • 上海电子税务局怎么添加办税员
  • 法制建设包括哪三个方面
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设