给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。
极大匹配(Maximal Matching)是指在当前已完成的匹配下,无法再通过增加未完成匹配的边的方式来增加匹配的边数。最大匹配(maximum matching)是所有极大匹配当中边数最大的一个匹配。选择这样的边数最大的子集称为图的最大匹配问题。
如果一个匹配中,图中的每个顶点都和图中某条边相关联,则称此匹配为完全匹配,也称作完备匹配。
求二分图最大匹配可以用最大流(Maximal Flow)或者匈牙利算法(Hungarian Algorithm)
设G=(V,E)是一个图,M是E的一个子集,如果M不含环且任意两边都不相邻,则称M为G的一个匹配。G中边数最多的匹配称为G的最大匹配。 对于图G=(V,E),在每条边e上赋一个实数权w(e)。设M是G的一个匹配。定义 M中所有边权值之和称之为匹配M的权。G中权最大的匹配称为G的最大权匹配。如果对一切,e∈E,w(e)=1,则G的最大权匹配就是G的最大匹配。
设M是图G=(V,E)的一个匹配,vi∈V。若vi与M中的边相关联,则称vi是M饱和点,否则称vi为M非饱和点。 如果G中每个顶点都是M饱和点,则称M为G的完美匹配。 设M是G的一个匹配,P是G的一条链。如果P的边交替地一条是M中的边,一条不是M中的边,则称P为M交错链。类似地,我们可以定义G的交错圈。易知,G的交错圈一定是偶圈。 一条连接两个不同的M非饱和点的M交错链称为M增广链。 两个集合S1与S2的“异或”操作S1⊕S2是指集合S1⊕S2=(S1∩S2)-(S1∪S2) 容易看出,设M是G的匹配,P是G中的M增广链、则M⊕P也是G的匹配,而且 可以证明,G中匹配M是最大匹配当且仅当G中没有M增广链。
若P是图G中一条连通两个未匹配顶点的路径,并且属M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径.
由增广路的定义可以推出下述三个结论:
1-P的路径长度必定为奇数,第一条边和最后一条边都不属于M.
2-P经过取反操作可以得到一个更大的匹配M’.
3-M为G的最大匹配当且仅当不存在相对于M的增广路径.
原文链接:https://blog.csdn.net/qq_41286356/article/details/89676967
它由匈牙利数学家Edmonds于1965年提出,因而得名。此算法的核心就是寻找增广路径,通过增广路径来求二分图最大匹配的一种算法。
通过这个图片来讲述一下。黑色代表A\B\C\D四只小狗,红色代表四种口味的骨头,每一条线表示的是小狗喜欢吃这个口味的骨头。
我们按照顺序给小狗们分配骨头,先给A分配,很明显a无人占用并且小A狗很喜欢,分配,博主最喜欢成人之美。(✿◡‿◡)
现在给小B狗分配,小B喜欢b,前提b无人占用并且小B心仪很久,又成全一只小狗,哇哈哈~~
轮到小C狗了,小C等了好久了,但是小C喜欢的骨头全都被占了,好可怜有木有,但是没关系,我们想办法来帮助他。如下图。
通过这张图,我们可以很清晰的知道,我们把A的先拿掉,但是还是要给找一个,不然岂不是太偏心,给A找到b,但是b被占了,同理,也先拿掉,这样A满足了,在给B继续找, 这样我们就找到c,ok大家都可以找到后备胎了,那么小C可以吃a!!!同理对d一样,但是发现如果满足d,其他的都会被破坏,综上,得到最大的匹配值为3。
匈牙利算法的流程就是上述的方案。
以下是一些技巧总结。
二分图的最小顶点覆盖:在二分图中求最少的边,让每条边至少和其中的一个点关联
最小顶点覆盖=最大匹配数
DAG图(无回路有向图(Directed Acyclic Graph))的最小路径覆盖:用尽量少的不想交的简单路径覆盖图中的所有顶点
最小路径覆盖=顶点数-最大匹配数
无向图的最小路径覆盖:
无向二分图的最下路径覆盖=顶点数-最大二分匹配/2(因为无向图就是双向的一条边等于两次入图正向和反向,最后得到的匹配数多了一倍所以要除以2才是原本的匹配数)
点可以重复走的最小路径覆盖:
【题意】:派机器人去火星寻宝,给出一个无环的有向图,机器人可以降落在任何一个点上,再沿着路去其他点探索,我们的任务是计算至少派多少机器人就可以访问到所有的点。有的点可以重复去。
【思路】:我们仍可将问题转换为最小路径覆盖。如果一个人需要经过另一个人走过的点时候,让他直接从该点上空飞过去,越过该点,直接走下一个点。如果我们赋予每个人这种能力,那么求得的无重复点的最小路径覆盖结果,就是题目要求的结果,因为需要重复的地方只要飞过去,就可以不重复了。赋予这个能力的方法就是吧所有点能间接到达的点全都改为直接到达。
二分图的最大独立集:在二分图中任意两点都不相邻的顶点的最大集合。
最大独立集=结点数-最大匹配数。
二部图的多重匹配:一般的二部图只能匹配一个点,在多重匹配中,一个点可以匹配多给点。
原文链接:https://www.cnblogs.com/qq-star/p/4633101.html