二分图经常使用建图方法及其性质

##建图方法 https://wenku.baidu.com/view/63c1a01655270722192ef7c3.htmlhtml

##性质 http://dsqiu.iteye.com/blog/1689505 前段时间系统的学习了一下二分图匹配,收获仍是蛮大的,总算是把最大匹配、点覆盖、点独立、边覆盖什么的关系搞清楚了,基本的算法和定理都会了,剩下的就是建模问题了,这个只能慢慢积累了,最后写个小结。算法

1、二分图最大匹配 定义:匹配是图中一些边的集合,且集合中任意两条边都没有公共点,全部的匹配中,边数最多的就是最大匹配。 算法:用匈牙利算法能够在O(V*E)的复杂度内求出二分图的最大匹配,具体能够看byvoid神犇的blog,讲的很详细,不过想真正彻底证实这个算法,得去看组合数学。闭包

2、二分图最小点覆盖 定义:点覆盖是图中一些点的集合,且对于图中全部的边,至少有一个端点属于点覆盖,点数最小的覆盖就是最小点覆盖。 定理:最小点覆盖=最大匹配。 简单证实:首先必然有,最小覆盖>=最大匹配。因而只要证实不等式能够取等号,咱们可在最大匹配的基础上构造出一组点覆盖。对右边每个未匹配的点进行dfs找增广路,标记全部dfs过程当中访问到的点,左边标记的点+右边未标记的点就是这个图的一个点覆盖。由于对于任意一条边,若是他的左边没标记,右边被标记了,那么咱们就可找到一条新的增广路,因此每一条边都至少被一个点覆盖。再来证实:最大匹配=左边标记的点+右边未标记的点。对于每条匹配边,只有一个点属于点覆盖。若是这条边在dfs过程当中被访问了,那么就左端点属于点覆盖,右端点不属于,不然就有左端点不属于点覆盖,右端点属于点覆盖。除此以外,不可能存在其它的点属于最小覆盖了,否则就必然能够找到增广路。因此:左边标记的点+右边未标记的点=最大匹配,对于任意的二分图,咱们总能在最大匹配的基础上构造出一组点数等于最大匹配的点覆盖,因此:最小点覆盖=最大匹配。学习

3、二分图最小边覆盖 定义:边覆盖是图中一些边的集合,且对于图中全部的点,至少有一条集合中的边与其相关联,边数最小的覆盖就是最小边覆盖。 定理:最小边覆盖=图中点的个数-最大匹配。 简单证实:先贪心的选一组最大匹配的边加入集合,对于剩下的每一个未匹配的点,随便选一条与之关联的边加入集合,获得的集合就是最小边覆盖,因此有:最小边覆盖=最大匹配+图中点的个数-2*最大匹配=图中点的个数-最大匹配。url

4、二分图最大独立集 定义:独立集是图中一些点的集合,且图中任意两点之间都不存在边,点数最大的就是最大独立集。 定理:最大独立集=图中点的个数-最大匹配。 简单证实:能够这样来理解,先把全部的点都加入集合,删除最少的点和与其关联的边使得剩下的点相互之间不存在边,咱们就获得了最大独立集。因此有:最大独立集=图中点的个数-最小点覆盖=图中点的个数-最大匹配。.net

5、有向无环图最小不相交路径覆盖 定义:用最少的不相交路径覆盖全部顶点。 定理:把原图中的每一个点V拆成Vx和Vy,若是有一条有向边A->B,那么就加边Ax-By。这样就获得了一个二分图,最小路径覆盖=原图的节点数-新图最大匹配。 简单证实:一开始每一个点都独立的为一条路径,总共有n条不相交路径。咱们每次在二分图里加一条边就至关于把两条路径合成了一条路径,由于路径之间不能有公共点,因此加的边之间也不能有公共点,这就是匹配的定义。因此有:最小路径覆盖=原图的节点数-新图最大匹配。htm

6、有向无环图最小可相交路径覆盖 定义:用最小的可相交路径覆盖全部顶点。 算法:先用floyd求出原图的传递闭包,即若是a到b有路,那么就加边a->b。而后就转化成了最小不相交路径覆盖问题。blog

7、偏序集的最大反链 定义:偏序集中的最大独立集。 Dilworth定理:对于任意偏序集都有,最大独立集(最大反链)=最小链的划分(最小不相交路径覆盖)。 经过Dilworth定理,咱们就能够把偏序集的最大独立集问题转化为最小不相交路径覆盖问题了。get

8、二分图带权最大匹配 定义:每一个边都有一组权值,边权之和最大的匹配就是带权最大匹配。 算法:KM算法,复杂度为O(V^3)。具体就不说了,网上有很多资料。 要注意的是,KM算法求的是最佳匹配,即在匹配是完备的基础上权值之和最大。这和带权最大匹配是不同的,不过咱们能够加入若干条边权为0的边使得KM求出来的最佳匹配等于最大权匹配。具体实现的时候最好用矩阵来存图,由于通常点的个数都是10^2级别,而且这样默认任意两点之间都存在边权为0的边,写起来很方便。若是要求最小权匹配,咱们能够用一个很大数减去每条边的边权。数学

相关文章
相关标签/搜索