匈牙利算法详解:从基本概念到实现步骤
创作时间:
作者:
@小白创作中心
匈牙利算法详解:从基本概念到实现步骤
引用
CSDN
1.
https://m.blog.csdn.net/nuc_baixu/article/details/144240615
匈牙利算法(Hungarian Algorithm)是一种解决二分图最大匹配或最小加权完美匹配的算法。其主要用于解决如下问题:给定一个成本矩阵,找出一种方式将矩阵的每一行和每一列都匹配上,使得总成本最小。
算法实现步骤
1. 初始化
- 给定一个二分图,图的节点分为两部分(通常为左侧集和右侧集),边上有权重,目标是找到一个匹配,使得所有匹配的边的权重和最小。
- 为了简化描述,设定权重矩阵为
cost[i][j]
,表示从左侧节点i
到右侧节点j
的边的权重。
2. 减法步骤
对于每一行,找到该行的最小元素,然后从该行的每个元素中减去这个最小值。这一步目的是减少每一行的权重,从而简化问题。
- 对每一行
i
,计算minRow = min(cost[i])
,然后更新cost[i][j] = cost[i][j] - minRow
。
3. 列减法
对每一列,找到该列的最小元素,然后从该列的每个元素中减去这个最小值。这一步目的是为了进一步简化问题。
- 对每一列
j
,计算minCol = min(cost[i][j])
,然后更新cost[i][j] = cost[i][j] - minCol
。
4. 标记行和列
对于这个矩阵,用数量最小的直线覆盖所有的0元素,如果线段数量为矩阵的列,那么,就找到了这样的最优分配。否则,找到没有被直线覆盖的元素中的最小的一个值,让每个没有完全被直线覆盖的元素行中的元素-这个值,让每个完全被直线覆盖了的列的元素+这个值。然后重复执行步骤3
算法时间复杂度
匈牙利算法的时间复杂度为O(n^3),其中 n
是二分图中节点的个数(假设左右两部分的节点数相等)。
热门推荐
小米SU7刹车故障事件:官方回应系软件误识别,将通过OTA升级修复
多久能看到RPA机器人流程自动化软件带来的效率提升?
从入门到进阶:如何科学挑选跑鞋让你跑得更轻松
这一年,细数那些弥足珍贵的瞬间
家庭安全新手册:家用摄像头的安装指南
如何预防痔疮
空腹训练法:自行车运动员的加速秘籍,空腹骑行是否明智?
大数据时代,IT 行业的热门岗位有哪些?9 大前景分析!
《了不起的盖茨比》:草根们的理想主义碰不过上流社会的阶级固化
假如人能选择来生
晚上读书的好处有哪些?夜读妙处:睡前阅读的5大益处!
决胜巅峰孙悟空角色介绍及玩法攻略
民族弹拨乐器有哪些
老人过世遗产继承公证需要哪些
板甲防御力解析:历史的见证与现代的启示
湖北宜城:科学育苗强“根基” 打造红薯产业强镇
中医警告:这种滋阴药,长期服用可能导致阳虚
不会“动态描写”?这些写作技巧太有感染力了
副脾是什么原因导致的
药品怎么看生产日期 药品保质期一般几年
好的进攻能击败好的防守?从总决赛和休赛期来看真的是这样吗?
农村特有植物"地木耳":营养价值超人参,市场价高达280元/公斤
2024年组装电脑怎么选配件【内存篇】
LPDDR3与DDR4内存:性能对比与适用场景详解,助您选择最佳笔记本内存产品
三元乙丙防水卷材:性能优越的建筑防水材料
毕节织金洞探秘记,穿越地下天宫,领略自然鬼斧神工!
扁桃体发炎自己好要几天
就业和失业率与GDP同样重要
什么是八大命格的特点_八大命格特点解析:揭秘命运奥秘
RPA项目实施6步走