匈牙利算法详解:从基本概念到实现步骤
创作时间:
作者:
@小白创作中心
匈牙利算法详解:从基本概念到实现步骤
引用
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 是二分图中节点的个数(假设左右两部分的节点数相等)。
热门推荐
美国陆军紧锣密鼓进行M10布克战车测试
美国坦克的发展历史及现状
科学养殖河蚌的基本知识与技巧:从水质到饲料全解析
汕头交通能级跃升!漳汕高铁、粤东城际铁路迎来新进展
来了,粤东城际铁路
电脑可以装几个机械硬盘
如何设置Excel中的行高和列宽以实现自适应内容?
桥本氏病的主要症状及治疗方法
拒绝并入985!这6所“硬气”高校,错失211后被群嘲:一无所有?
如何将C代码和汇编代码进行链接
青岛市区哪里最宜居?五个区域全面解析
孔融之"不孝"罪名背后的真相
全球首创,新一代"破伤风针"新替妥®获批上市
消费税税率是多少?计税方法是怎样的?
【旧藏】“良民证”——日伪临时身份证
英国七国之乱:历史纷争与统一的前奏
英国七国之乱:历史纷争与统一的前奏
2025学年学生优惠资质核验指南
数据洞察:2024中日韩三国游客互通,创疫后新高
平湖市义务教育集团化办学:携手共进,探索教育新篇章
单亲母亲控制欲:如何应对和解决
佛山买家私哪里好?打造理想家居的必备指南
甘蔗种植技术全攻略:从选种到收获的全程指南
国际贸易术语CPT详解:从基础到进阶!
Mac忘记密码怎么办?苹果官方支持文档教你轻松重置
如果你忘记了 Mac 登录密码
购买二手房该怎么核实房屋产权
学生劳动自我评价(通用5篇)
3 种实操方法:如何将硬盘从 MBR 转换为 GPT 分区方案
外伤缝合误区全解析:让你的伤口愈合更科学