# 使用 Python 实现匈牙利算法和 KM 算法
在处理最优匹配问题,例如分配问题时,匈牙利算法(Hungarian algorithm)是一种优秀的解决方案。KM 算法(Kuhn-Munkres algorithm)是匈牙利算法的现代实现,用于解决加权匹配问题。本文将带领你一步步实现这两个算法,主要步骤包括:定义图、实现算法和测试案例。
## 流程概述
下面是实现匈牙利算法和 KM 算            
                
         
            
            
            
            匈牙利算法
    匈牙利算法是一种用于求解任务分配问题的组合优化算法,用于解决最大匹配问题。假定存在a个人和b个任务,每个人对应多个任务,每个任务也对应多个人,我们希望提供一种策略,尽可能的为每个人分配一个独立的任务,则可以使用匈牙利算法。基本概念图的基本概念二分图设G = (V, E)是一个无向图,表示V个顶点,E条边。若能将G的顶点V划分为两个不想交的子集            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-11-03 11:19:05
                            
                                146阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            可参考《图论算法理论、实现及应用》 【书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程】  匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。 -------等等,看得头大?那么请看下面的版本:  通过            
                
         
            
            
            
            目录1. 前言2. 例题3. 总结1. 前言本篇博文将会专门讲述匈牙利算法的具体思路,实现过程以及正确性证明。匈牙利算法是在 \(O(n \times e+m)\) 内的时间内寻找二分图的最大匹配的一种算法,其中 \(n\) 为左部点个数,\(m\)在学习匈牙利算法之前,请先确保掌握以下名词:二分图匹配与最大匹配增广路如果对上述部分名词没有掌握,请先掌握后再来学习。懒得百度?传送门:图论专题-学习            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-22 15:50:31
                            
                                43阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            ref: https://zhuanlan.zhihu.com/p/110590953 https://www.zhihu.com/search?type=content&q=%E5%8C%88%E7%89%99%E5%88%A9%E5%8C%B9%E9%85%8D%20%E8%B7%9F%E8%B            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-05-24 15:58:03
                            
                                4085阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            题目链接二分图最大匹配的模板。对于二分图:我们称,一个图中,当且仅当其没有奇环时,是一个二分图。那么,最大二分图匹配就是:给定二分图,现在要选出一些边,使得与每一个点相连的边最多选出一条,求最多选出的边数。当所有边都被匹配上时,称之为一个完美的二分图匹配。来一个例题吧: 从前有a个男生和b个女生,有一些男女之间有互相喜欢的关系,现在它们想要两两配对,怎样配对才能让配成的对数尽可能多?这就            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-02 20:15:03
                            
                                133阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            视频来自bilibili,自己学习过程中截的图            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-12-09 10:44:49
                            
                                104阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            匈牙利算法python代码实现以及原理图解1、匈牙利算法python代码实现:2、原理图解: 1、匈牙利算法python代码实现:scipy中有对应的接口scipy.optimize.linear_sum_assignment,输入代价矩阵,即可得到分配问题的结果:>>> cost = np.array([[4, 1, 3], [2, 0, 5], [3, 2, 2]])            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-16 16:06:36
                            
                                1135阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            python的scipy(匈牙利算法)解决教学任务指派问题问题简介算法教师与课程一样多教师少与课程多教师少与课程多且一个教师最多教两门课,最少一门实际问题运行时间与复杂度问题 参考资料:匈牙利算法求解教学任务指派问题指派问题 组合优化理论里的第六章_指派问题的课件问题简介在生活中经常遇到这样的问题,某单位需完成n项任务,恰好有n个人可承担这些任务。由于每人的专长不同,各人完成任务不同(或所费时间            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-05 23:14:14
                            
                                128阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            匈牙利算法的MATLAB实现首先是CSDN上这篇文章很清晰的讲解了匈牙利算法的思路。顺着思路本弱鸡也尝试动手写了一下。分派问题(匈牙利算法)与MATLAB实现匈牙利算法的matlab实现主程序clc;
clear;
% 主程序:基于匈牙利算法
% 输入的矩阵是前面计算好的COST(calculating_price.m)
% 需要对矩阵进行处理,基站列需要扩充,基站最多要满足M个CR用户的请求;行            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-28 13:56:52
                            
                                89阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            SORT 流程简介:整个流程如下图所示:在第 1 帧时,人体检测器 detector 输出 3 个 bbox(黑色),模型会分别为这 3 个 bbox 创建卡尔曼滤波追踪器【tracker】 kf1,kf2 和 kf3。所以注意第一帧的追踪器是用目标检测的框创建的,ID也是我们手动赋予的。 对应人的编号为 1,2,3 。在第 2 帧的过程 a 中,如下图frame-2a,这 3 个跟踪器【每个人都            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-12 12:45:57
                            
                                69阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            匈牙利算法第一次讲解一个算法,也是最近才学到的一个算法,我的语言表达能力可能不是很强,排版也不是特别好,但是真的有认真在做一篇文章,如果有好的意见可以告诉我,非常感谢。匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。美国数学家哈罗德·库恩于1955年提出该算法。此算法之所以被称作匈牙利算法,是因为算法很大一部分是基于以前匈牙利数学家Dénes Kőnig和            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-29 20:33:45
                            
                                136阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            最近浅学了一下匈牙利算法,略有感触,发文记录一下匈牙利算法是用在二分图匹配中的所以要先知道二分图的几个概念二分图:有这么一个图把一个图的顶点划分为两个不相交的集合 U 和 V ,且使得每一条边都分别连接 U 、V 中的顶点,如果存在这样的划分,则称此图为二分图。简单说,就是可以把一个图分为两部分,同一部分里没有边相连如图:匹配:二分图匹配就是边集中的任意两条边没有公共顶点如图,图中的红边叫做匹配最            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-23 17:56:55
                            
                                198阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            https://zhuanlan.zhihu.com/p/90835266Tracking-by-Detecton 基于目标检测的结果来进行目标跟踪:匈牙利算法(KM算法):将前一帧中的跟踪框tracks与当前帧中的检测框detections进行关联,通过外观信息、马氏距离、或者IOU来计算代价矩阵卡尔曼滤波:基于传感器的测量值(在目标跟踪中即目标检测器)与跟踪器的预测值,实现更精确的估            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-01 06:41:33
                            
                                155阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            匈牙利算法、Hopcroft-Karp算法和Kuhn-Munkres算法是三种常见的二分图匹配算法,它们在实现方式、时间复杂度和适用场景上有所差异。以下是它们的区别和优缺点:匈牙利算法:实现方式:匈牙利算法使用深度优先搜索(DFS)来寻找增广路径,通过不断更新匹配的顶点对来找到最大匹配。时间复杂度:匈牙利算法的时间复杂度为O(VE),其中V是顶点数,E是边数。优点:实现简单,易于理解和实现。缺点:            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-03 10:25:31
                            
                                974阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            描述输入一个字符串,内容是一个不重复的整数数组。若数组中两个数相加为素数,那么这两个数可以配对,即素数伴侣。一个数字只能配对一次。输出最大配对数。示例输入:
4
2 5 6 13
输出:
2
说明:
输入第一行为数组长度,第二行为数组字符串
此时当2和13配对,5和6配对时,得到最大配对数2匈牙利算法介绍匈牙利算法用于解决二分图最大匹配问题。二分图是指一个图的节点可以分为两部分A和B,A中的节            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-08-22 22:51:17
                            
                                264阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            看这个算法之前,最好先看下匈牙利算法,KM算法 是建立在匈牙利算法基础上实现的对于这个算法最有误区的地方,个人感觉还是在  X 集合 -d  和 Y 集合 + d之后 还要进行操作,再加上 深搜递归操作  ,理解容易产生误区,在这里我给出一组模板的测试数据来帮助初学者理解注意观察: visx[],visy[],lx[],ly[],linky[],在调用中的变化:3 4            
                
         
            
            
            
            匈牙利算法的概述用来解决二分图中的最优分配问题的算法,也就是图论中寻找最大匹配的算法。从实际问题的角度理解(\(\mbox{KM}\)算法)第(1)步:找到每个成员的长处,即寻找各个成员完成各任务的最短耗时。将成本矩阵的各行减去该行的最小值,找出各行的“0”;第(2)步:找到各任务的最佳人选,即寻找各任务分配给各成员完成的最短耗时。将(1)中处理后的成本矩阵的各列减去该列的最小值,找出各列的“0”            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-19 19:22:30
                            
                                123阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            “ 
 匈牙利 
 ” 
 法,该命名规则的主要思想是 
 “ 
 在变量和函数名中加入前缀以增进人们对程序的理解 
 ” 
 。
 
例如所有的字符变量均以 
 ch 
 为前缀,若是指针变量则追加前缀 
 p 
 。如果一个变量由 
 ppch 
 开头,则表明它是指向字符指针的指针。
 
“ 
 匈牙利 
 ” 
 法最大的缺点是烦琐,例如
 
int    i, j, k; 
 
floa            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-12-31 12:52:26
                            
                                46阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            匈牙利算法应用于二分图(即可以分为两大部分,且个部分内不连接的图)匹配的问题,它的时间复杂度为O(nm)。它的基本原理是增广路。它的用途主要有三:1、单纯二分图匹配;2、最小点覆盖;3、最大独立集。下面,我将一一介绍。一、单纯二分图匹配例题1:有n只公牛和m只母牛,然后每只公牛都可以和几只的母牛配对。在每只公牛只能配对一只母牛的情况下,求能为牛们配对最多多少对?思路:公牛是二分图的一个集合,母牛也            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-01-02 22:08:38
                            
                                65阅读