匈牙利算法详解:从基本概念到实现步骤
创作时间:
作者:
@小白创作中心
匈牙利算法详解:从基本概念到实现步骤
引用
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 是二分图中节点的个数(假设左右两部分的节点数相等)。
热门推荐
什么茶冲泡时,最好做到茶水分离,这样更好喝?
中药桂枝是桂花树枝吗
《燕云十六声》虽然拧巴,但其实真的挺好玩
CSGO高性价比箱子推荐及实战技巧解析
钢琴大师梅内海姆·普莱斯勒:从比赛冠军到室内乐传奇
二次能源与一次能源的差异之谜
昆山:“胶囊太空舱”暖心破解重症陪护困境
中国一边费力进口大量原油,一边低价出口成品油,这为了什么呢?
各地婚姻数据公布,广东还是第一名
航运公司联手挺价,欧线期货飙升12%!后续走势如何?
自然流量的定义与其他流量的区别
服用安宫牛黄丸后的注意事项
钱可以不用,但不能没有:金钱安全垫与现代生活的智慧
了解缅因猫:养猫新手必读指南,挑选与护理秘诀详解
中国一边费力进口大量原油,一边低价出口成品油,这为了什么呢?
2024十大国际军事新闻
宋高宗赵构罪名考辨
美国审查计划"逼死"华裔科学家?
Stellantis品牌困境:14个品牌如何走出泥潭?
钢琴大师梅内海姆·普莱斯勒的艺术人生
中国人为什么很少吃狗肉?
西门子PLC新手入门项目程序:定长切纸程序及触摸屏程序实际应用
跑步运动蔚然成风!如何让家门口的跑道变得更友好?
华为手机无法安装软件怎么办?两种解决方案帮你轻松应对
血常规检查中的CRP是什么?一文读懂其意义与应对方法
《鬼吹灯》系列探险小说的阅读顺序与故事连贯性解析
物生政可选专业一览表2025 :物生政可以报考的大学名单
数据资产管理之道:PDCA循环引领数字化转型
路“漫漫”还是路“曼曼”?古文用字背后的学问
宁波天一阁·月湖景区深度游指南:历史文化与美景同行