博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分图匹配 学习笔记
阅读量:5058 次
发布时间:2019-06-12

本文共 837 字,大约阅读时间需要 2 分钟。

 二分图,顾名思义,其点可以分成两部分,而与之相连的边一定是由一部分连向另一部分的。特殊的,树也是一种二分图。

实际上,如果设图G=(V,E)是一个无向图,并且点集V可分割为两个互不相交的子集V1,V2,那么称此图G为二分图。

而匹配一词,用比较正规的话来说,是一个边的集合,其中任意两条边都没有公共点。

匹配边:在一个匹配中的边

匹配点:匹配边相连的点

非匹配边:not 匹配边

非匹配点:not 匹配点

最大匹配:一个图中所有匹配中最大的那个

完美匹配:一个图中所有点都是匹配点,这个匹配就是完美匹配

如果我们要在一个图里求最大匹配,一个显然的暴力做法是枚举每一个可能的匹配并维护最大值。这个算法的时间复杂度高到上天。

实际上, 我们可以用匈牙利算法来求一个叫做增广路的东西,以此来求最大匹配。

说增广路之前先说什么叫交替路。 交替路指的是一个这样的路径,从一个非匹配点出发,交替经过匹配边和非匹配边。 增广路指的是从一个非匹配点出发,走交替路,如果途径另外一个非匹配点,这条交替路就称为增广路。

增广路有很多性质,这里不讨论。

我们说一下匈牙利算法。

匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。

通俗的讲,这是一个绿与被绿的过程(逃

在我学习匈牙利算法的时候,我看到一个非常生动形象的图,我把它贴在这,大家可以看看

上面那个图就是一个二分图。匈牙利算法是一个基于dfs的过程,只需要枚举一遍第一个集合里的所有点,在所有点都做一次dfs就可以。

首先a去找1,然后b试图找1发现a已经和1配对了,并且a不能去找其他人,所以b不能找1,b要去找2.然后c试图找2,同时c发现就算c连了2也不会影响b,因为b还可以连3.此时连接完毕,算法结束。

超简单的是吧= =

转载于:https://www.cnblogs.com/OIerShawnZhou/p/7758145.html

你可能感兴趣的文章
UWP: 掌握编译型绑定 x:Bind
查看>>
asp.net core系列 35 EF保存数据(2) -- EF系列结束
查看>>
WPF程序加入3D模型
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
C#中的IEnumerable<T>知识点
查看>>
android访问链接时候报java.net.MalformedURLException: Protocol not found
查看>>
dwz ie10一直提示数据加载中
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Windows Phone Marketplace 发布软件全攻略
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
语义web基础知识学习
查看>>
hexo个人博客添加宠物/鼠标点击效果/博客管理
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
关于WPF的2000件事 02--WPF界面是如何渲染的?
查看>>
单元测试、、、
查看>>
深入理解include预编译原理
查看>>
SVN使用教程总结
查看>>
JS 浏览器对象
查看>>
TestNG入门
查看>>