二分图学习

http://dsqiu.iteye.com/blog/1689505#comments(本篇文章中的:增广路定理,应只是用于二分图,(奇环时不成立))

http://www.cnblogs.com/kuangbin/archive/2012/08/26/2657446.html

http://blog.csdn.net/lin375691011/article/details/18908423#comments

http://blog.csdn.net/leolin_/article/details/7199688 !!!!


下面的主要摘自博客一

注意极小和最小的区别

二分图对下面的应用条件:无向图二分图(除去最小路径覆盖的应用)(正确性???)


设点数为V,边数为E,最大匹配为M;

主要常见问题:

1.最小点覆盖 (=M)注意输出最小点覆盖集

(1)证明最小点覆盖,求最小点覆盖集:

http://blog.csdn.net/niushuai666/article/details/7036897

poj3715

(2) 二分图最小覆盖集和最大独立集的构造

二分图有下面两个性质:

定理1:最小覆盖数 = 最大匹配数

定理2:最大独立集S 与 最小覆盖集T 互补

算法实现步骤:

1. 做最大匹配,没有匹配的空闲点∈S

2. 如果u∈S那么u的邻点必然属于T

3. 如果一对匹配的点中有一个属于T那么另外一个属于S

4. 还不能确定的,把左子图的放入S,右子图放入T

算法结束


2.最小边覆盖 (注意:最小边覆盖不等于最大匹配)(=V- M)注意输出最小边覆盖集

3.最小路径覆盖(DAG图)(构图后,=V-M)注意输出路径

(1)最小路径覆盖(path covering):是“路径” 覆盖“点”,即用尽量少的不相交简单路径覆盖有向无环图G的所有顶点,即每个顶点严格属于一条路径。路径的长度可能为0(单个点)。

最小路径覆盖数=G的点数-最小路径覆盖中的边数。应该使得最小路径覆盖中的边数尽量多,但是又不能让两条边在同一个顶点相交。拆点:将每一个顶点i拆成两个顶点Xi和Yi。然后根据原图中边的信息,从X部往Y部引边。所有边的方向都是由X部到Y部。因此,所转化出的二分图的最大匹配数则是原图G中最小路径覆盖上的边数。因此由最小路径覆盖数=原图G的顶点数-二分图的最大匹配数便可以得解。


(2)二分图最小路径覆盖求解

http://blog.csdn.net/wall_f/article/details/8187144

 

最小覆盖的相关性质可查看前面的第一部分。

 

有向无环图最小不相交路径覆盖

       定义:用最少的不相交路径覆盖所有顶点。

       定理:把原图中的每个点V拆成Vx和Vy,如果有一条有向边A->B,那么就加边Ax-By。这样就得到了一个二分图,最小路径覆盖=原图的节点数-新图最大匹配。

       简单证明:一开始每个点都独立的为一条路径,总共有n条不相交路径。我们每次在二分图里加一条边就相当于把两条路径合成了一条路径,因为路径之间不能有公共点,所以加的边之间也不能有公共点,这就是匹配的定义。所以有:最小路径覆盖=原图的节点数-新图最大匹配。

 

有向无环图最小可相交路径覆盖

       定义:用最小的可相交路径覆盖所有顶点。

       算法:先用floyd求出原图的传递闭包,即如果a到b有路,那么就加边a->b。然后就转化成了最小不相交路径覆盖问题。


4.最大独立集(=V-M)  注意输出最大独立集

5.最大团(重新构图,转化为最大独立集问题)注意输出最大团

6.最大边独立集(边独立即匹配,最大边独立集数即最大匹配)(=M)

7.最小支配集???(未解决)

8.最小边支配集???(未解决)


、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

博客一中的概念:

匹配

匹配(matching)是一个边集,满足边集中的边两两不邻接。匹配又称边独立集(edge independent set)。

在匹配中的点称为匹配点(matched vertex)或饱和点;反之,称为未匹配点(unmatched vertex)或未饱和点。

交错轨(alternating path)是图的一条简单路径,满足任意相邻的两条边,一条在匹配内,一条不在匹配内

增广轨(augmenting path):是一个始点与终点都为未匹配点的交错轨。

最大匹配(maximum matching)是具有最多边的匹配。

匹配数(matching number)是最大匹配的大小。

完美匹配(perfect matching)是匹配了所有点的匹配。

完备匹配(complete matching)是匹配了二分图较小集合(二分图X,Y中小的那个)的所有点的匹配。

增广轨定理:一个匹配是最大匹配当且仅当没有增广轨。

所有匹配算法都是基于增广轨定理:一个匹配是最大匹配当且仅当没有增广轨。这个定理适用于任意图。

 

二分图的性质

二分图中,点覆盖数是匹配数。
    (1) 二分图的最大匹配数等于最小覆盖数,即求最少的点使得每条边都至少和其中的一个点相关联,很显然直接取最大匹配的一段节点即可。
    (2) 二分图的独立数等于顶点数减去最大匹配数,很显然的把最大匹配两端的点都从顶点集中去掉这个时候剩余的点是独立集,这是|V|-2*|M|,同时必然可以从每条匹配边的两端取一个点加入独立集并且保持其独立集性质。
    (3) DAG的最小路径覆盖,将每个点拆点后作最大匹配,结果为n-m,求具体路径的时候顺着匹配边走就可以,匹配边i→j',j→k',k→l'....构成一条有向路径。

     (4)最大匹配数=左边匹配点+右边未匹配点。因为在最大匹配集中的任意一条边,如果他的左边没标记,右边被标记了,那么我们就可找到一条新的增广路,所以每一条边都至少被一个点覆盖。

     (5)最小边覆盖=图中点的个数-最大匹配数=最大独立集。


增广路径必须满足的性质

1.有奇数条边。

2.起点在二分图的左半边,终点在右半边。

3.路径上的点一定是一个在左半边,一个在右半边,交替出现。(其实二分图的性质就决定了这一点,因为二分图同一边的点之间没有边相连,不要忘记哦。)

4.整条路径上没有重复的点。

5.起点和终点都是目前还没有配对的点,而其它所有点都是已经配好对的。

6.路径上的所有第奇数条边都不在原匹配中,所有第偶数条边都出现在原匹配中。

7.最后,也是最重要的一条,把增广路径上的所有第奇数条边加入到原匹配中去,并把增广路径中的所有第偶数条边从原匹配中删除(这个操作称为增广路径的取反),则新的匹配数就比原匹配数增加了1个(奇数=偶数+1)。


彻底理解增广路查找方法

1.总是从X集的未匹配点出发,寻找匹配点或者未匹配点,如查找到未匹配点则该增广路终止,否则以该点的增广路不存在。

2.每次查找增广路都是在之前形成的匹配(上面步骤3中异或后的匹配)的基础上进行延伸的,也就是查找匹配点总是在匹配M中,其实就是用起点和终点两个未匹配点将得到匹配的边尽可能的连接起来的增广路,这样增广路长度就延长了,当然也可以是直接就是以两个个未匹配点的边(就直接添加进匹配中)。总而言之,每次扩充匹配不是通过延伸增广路径就是新增增广路径(当然长度为1)。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、


自己的一些理解:

一个点在变成盖点之后便不会再变成非盖点,所以每一次选择一个未盖点u进行dfs,若果没有找到增广路,则以后也不会再找到


关于交替路和增广路

交替路:

非匹配边-》匹配边-》非匹配边。。。

未盖点-》盖点-》 盖点-》。。。

增广路:

匹配边-》匹配边-》非匹配边-》。。。-》非匹配边

未盖点-》盖点-》盖点-》。。。-》非盖点

对于二分图G:对于白书p348的一个博弈思考

若为完美匹配,则不存在未盖点。

从一个盖点出发有:

匹配边-》非匹配边-》。。。-》非匹配边-》匹配边-》

盖点-》盖点-》盖点-》。。。-》盖点

若不是完美匹配,则存在非盖点:

从一个非盖点出发有:

非匹配边-》。。。-》非匹配边-》匹配边-》 

盖点-》盖点-》盖点-》。。。-》盖点


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值