0

0

多目标跟踪之二分图无权匹配-匈牙利算法

P粉084495128

P粉084495128

发布时间:2025-07-31 15:16:56

|

315人浏览过

|

来源于php中文网

原创

本文介绍多目标跟踪中二分图匹配的匈牙利算法与KM算法。先解释完美匹配、二分图、最大匹配、交错路径等概念,以男女配对为例,演示匈牙利算法流程:通过匹配与寻找增广路径交替操作实现最大匹配,并附代码及输入输出说明,展示算法如何解决二分图无权匹配问题。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

多目标跟踪之二分图无权匹配-匈牙利算法 - php中文网

多目标跟踪之二分图无权匹配——匈牙利算法(这里以找对象为例)

多目标跟踪加权二分图匹配 ——KM

1 基本概念介绍

  • 完美匹配:

考虑部集为X={x1 ,x2, ...}和Y={y1, y2, ...}的二部图,一个完美匹配就是定义从X-Y的一个双射,依次为x1, x2, ... xn找到配对的顶点,最后能够得到 n!个完美匹配。

  • 二部图(二分图):

给定两组顶点,但是组内的任意两个顶点间没有边相连,只有两个集合之间存在边,即组1内的点可以和组2内的点相连,如下图,这样构建出来的图就叫做二部图(更好理解就是n个男人,n个女人,在不考虑同性恋的情况下,组成配偶)

多目标跟踪之二分图无权匹配-匈牙利算法 - php中文网

  • 最大匹配: 一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配。

可以看出来,完美匹配一定是最大匹配,而最大匹配不一定是完美匹配。当然,有些情况下我们做不到完美匹配,只能尽可能实现最多的配对,这个就叫做最大匹配。所以,我们的核心目标就是找到最大匹配了。

  • 交错路径:

给定图G的一个匹配M,如果一条路径的边交替出现在M中和不出现在M中,我们称之为一条M-交错路径。而如果一条M-交错路径,它的两个端点都不与M中的边关联,我们称这条路径叫做M-增广路径。

2 算法流程

  • 男女关系矩阵如下

男1 男2 男3
女1 1 1 1
女2 1 0 0
女3 1 1 0
  • 关系图如下(图线有点歪,迁就看吧),红线表示有关系(未匹配),蓝线表示已匹配

多目标跟踪之二分图无权匹配-匈牙利算法 - php中文网

  • 第一步:首先给男1进行匹配,发现第一个与其相连的女1还未匹配,将其配对,连上一条蓝线。

多目标跟踪之二分图无权匹配-匈牙利算法 - php中文网

  • 第二步:接着匹配男2,发现与其相连的第一个目标女1已匹配,这就需要寻找增广路径了。

男2 - 女1 - 男1 - 女2

男2 (未匹配) 女1 (已匹配) 男1 (未匹配) 女2

DALL·E 2
DALL·E 2

OpenAI基于GPT-3模型开发的AI绘图生成工具,可以根据自然语言的描述创建逼真的图像和艺术。

下载

这有个需要注意的点,就是未匹配和已匹配要交替查找

取反: 男2 (已匹配) 女1 (未匹配) 男1 (已匹配) 女2 如下图

多目标跟踪之二分图无权匹配-匈牙利算法 - php中文网

  • 第三步:接着匹配男3,发现与其相连的第一个目标女1已匹配,这就又需要寻找增广路径了。

男3 - 女1 - 男2 - 女3

男3 (未匹配) 女1 (已匹配) 男2 (未匹配) 女3

取反:男3 (已匹配) 女1 (未匹配) 男2 (已匹配) 女3

多目标跟踪之二分图无权匹配-匈牙利算法 - php中文网

  • 去掉红线最终结果(熟悉数据结构的同学现在发现了,查找方法采用了深度优先)

多目标跟踪之二分图无权匹配-匈牙利算法 - php中文网

3 代码实现

In [3]
class graph:
    def __init__(self,gi,bo): # 输入二部图两个顶点集合的数目,每个集合的顶点均用1, ... , n表示
        self.numg=gi # 女孩数量
        self.numb=bo # 男孩数量
        self.boy={i:[]for i in range(1,bo+1)} # 男孩的可连接对象,建图
        self.viag=[0 for i in range(gi+1)] # 记录当前匹配女孩的对象
        self.use=[0 for i in range(gi+1)] # 检查女孩是否被搜索过
    def add(self,u,v):
        self.boy[v].append(u)    def find(self,j): # 寻找 j 男孩起始的增广路
        if j==0:            return 1
        for i in self.boy[j]:            if self.use[i]==0: # 女孩没有被搜索过
                self.use[i]=1
                if self.find(self.viag[i]): # 检查 j 匹配女孩后,女孩原男友是否有其它的女友,有则表示存在增广路
                    self.viag[i]=j                    return 1
        return 0
    def Hungarian(self):
        sum=0
        for i in range(1,self.numb+1): # 检查每个男孩是否能找到女有
            self.use = [0 for i in range(self.numg + 1)] # 初始化为0
            if self.find(i):                sum+=1
        return sum,self.viag[1:]if __name__=="__main__":
    n,girlnum,boynum = map(int, input().split())
    dic = graph(girlnum,boynum)    for i in range(n):
        a, b = map(int, input().split())
        dic.add(a,b)    print(dic.Hungarian())# 输入:# 6 3 3     # 1 1# 1 2# 1 3# 2 1# 2 3# 3 1# 输出:# (3, [2, 3, 1])# 输入解释:# 总关系数 男数 女数 (中间空格间隔,每行一回车)# 男1 女1 有关系。。。。# 输出解释# 最大匹配 [2,3,1]表示右集合(女)的序号,分别对应左集合(男)1,2,3






(3, [2, 3, 1])

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

538

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

27

2026.01.06

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

408

2023.08.14

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

143

2026.01.28

包子漫画在线官方入口大全
包子漫画在线官方入口大全

本合集汇总了包子漫画2026最新官方在线观看入口,涵盖备用域名、正版无广告链接及多端适配地址,助你畅享12700+高清漫画资源。阅读专题下面的文章了解更多详细内容。

28

2026.01.28

ao3中文版官网地址大全
ao3中文版官网地址大全

AO3最新中文版官网入口合集,汇总2026年主站及国内优化镜像链接,支持简体中文界面、无广告阅读与多设备同步。阅读专题下面的文章了解更多详细内容。

64

2026.01.28

php怎么写接口教程
php怎么写接口教程

本合集涵盖PHP接口开发基础、RESTful API设计、数据交互与安全处理等实用教程,助你快速掌握PHP接口编写技巧。阅读专题下面的文章了解更多详细内容。

2

2026.01.28

php中文乱码如何解决
php中文乱码如何解决

本文整理了php中文乱码如何解决及解决方法,阅读节专题下面的文章了解更多详细内容。

4

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号