匈牙利算法详解:从基本概念到实现步骤
创作时间:
作者:
@小白创作中心
匈牙利算法详解:从基本概念到实现步骤
引用
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
是二分图中节点的个数(假设左右两部分的节点数相等)。
热门推荐
地球上的绿宝石-荔波小七孔
手机屏幕“黄金尺寸”之争:是追随手感还是视觉盛宴?
提升小学语文学习环境的措施
沙发修复上门服务指南:流程、注意事项及寻找方法
长寿时代,如何活出不被年龄定义的人生?
胃痛营养补充贴士
职场心理咨询:陷入职业倦怠,感觉工作毫无意义,该如何调整?
60V电动车铅酸电池换磷酸铁锂电池,这些细节不注意等于白换!
半老徐娘只服《似锦》这4位,皮肤白皙,风韵犹存,越老越有韵味
农业农村部:严厉打击“瘦肉精”等违法添加和私屠滥宰行为
如何为您的种植室/帐篷选择合适的种植风扇
陶渊明:隐逸诗人的人生与艺术
鼻骨骨折复位方法是什么
长沙种牙哪个医生好?优选大众认可的牙科医生
走来窗下笑相扶,爱道画眉深浅入时无?
企业如何根据市场需求调整供需情况:策略与实践
质量管理中如何进行成本效益分析
清明节食谱:青团的制作方法(清明节必吃的传统美食,如何在家轻松制作青团?)
清明节期间适合吃哪些传统饭菜?(清明节适合吃什么饭)
农业新质生产力看北京|当科技邂逅田园 打造家门口的诗与远方
脚肿怎么办?三种实用消肿方法及原因分析
人生建议:心情差时必看这3部喜剧,笑完能多活十年!
一代“股神”徐翔,3万本金炒到210亿,是如何从巅峰跌落神坛的?
工程管理CPK详解:定义、作用与提升方法
普通社区工作者到社区书记有多远路要走
水瓶座是什么星象属性?风象星座水瓶座属性分析
读书报告写作指南:从封面到结尾的完整框架
英国金斯顿大学怎么样?被低估的实力派!
他克莫司软膏买哪个牌子
瘦肉精是什么?对人体有哪些危害?