二分图最大(基数)匹配以及与其等价的几个问题
来源:互联网 发布:剑灵天族捏脸数据大全 编辑:程序博客网 时间:2024/05/21 07:09
一.最大独立点集的定义
给定无向图G(V,E),其中A为顶点集合V的子集,且E∩{(i,j) | i,j∈A}=空集.
求A,使得|A|最大
二.最小顶点覆盖集的定义
给定无向图G(V,E),一个顶点覆盖集(vertex covering)是指顶点集S(S为V的子集),使得G中任一条边(x,y)至少有一端点在S中.
求S,使得|S|最小
三.最大完全子图的定义
给定无向图G(V,E),其中C为顶点集合V的子集,对于任意两个点i,j∈C,且i≠j,有(i,j)∈E.
求C,使得|C|最大
四.三者的等价性
(1)最大独立点集与最小顶点覆盖集的等价性
假设A为G(V,E)的一个独立点集,令B=V-A,则B为V的子集.
那么很容易就可以得出这样的结论:对于任意一条边(i,j)∈E,有i∈B或j∈B
所以B是图G(V,E)的顶点覆盖集
于是|A|=|V|-|B|,也就是说最大独立点集与最小顶点覆盖集是等价的两个问题.
在这个转化过程中就用到了点的“补集转化”——用点集V减去求解目标集合A,以得到新的目标集合B
(2)最大独立点集与最大完全子图的等价性
假设C为G(V,E)的一个完全子图
令全集U={(i,j) | (i,j)∈V},令E'=U-E,
则在无向图G'(V,E')中,有E∩{(i,j)| i,j∈C}=空集,所以C也是图G'的最大独立点集。
五.二部图中的最大独立点集/最小顶点覆盖集/最大完全子图/最大(基数)匹配
对于普通图而言,最大独立点集/最小顶点覆盖集/最大完全子图都是NPC问题。
但对于二分图/二部图/偶图来说,这些问题与二分图的最大(基数)匹配是等价的,从而能找到多项式时间内的解法。
来看下面这个定理(同时也是二分图最大匹配的匈牙利算法中需要证明的问题):
二分图G(V,E)中匹配M是最大匹配当且仅当G中没有M增广链。
同样,我们换个角度来说,在匈牙利算法中不管以怎样的顺序找到一个匹配M,只要再也找不出M的增广路径,那么M一定就是个最大匹配
证明过程如下:
(1)首先来看下面这个弱对偶性:
如果M是任意一个匹配,S是任意一个顶点覆盖集,则M中的任一条边可以对应到一个S中是此边端点的顶点(若有两个可能则随便选一个出来对应),因为M是匹配,M中不同二边并不会对应到相同的顶点,所以|M|<=|S|;
一般来说,有些S中的顶点也可能不被“匹配”到,所以不等号可能成立,因此,可以得到下列的弱对偶不等式:
|最大匹配集合M|<=|最小顶点覆盖集S|
(2)其次考虑下面两集合M*和S*:
首先,M*就是算法停下來时的匹配(对集);
其次,在算法停下來的最后那次,有些顶点被列出來,有些未被列出來,S*就是所有X中未被列出的顶点和Y中被列出的顶点所成的集合(X和Y就是指二分图中的那两个顶点划分集合)。
如果我们能说明下列三件事情:
(甲) M*是一个匹配。
(乙) S*是一个顶点覆盖集。
(丙) |S*|<=|M*|
则可以得到下列不等式:
|M*|<=|M|<=|S|<=|S*|<=|M*|
因此,所有不等式也就成为等式,这其实一举证明了下面三件事实:
(甲') M*是一个最大匹配。
(乙') S*是一个最小顶点覆盖。
(丙') 最大匹配的边数等于最小顶点覆盖集的点数。
- 二分图最大(基数)匹配以及与其等价的几个问题
- 二分图基数最大匹配 匈牙利算法
- 二分图最大匹配与其应用
- 匹配算法·温故知新——二分图的最大(基数)匹配
- 二分图最大基数匹配 POJ 1274 The Perfect Stall
- 匈牙利算法,二分图最大基数匹配(过山车,hdu 2063)
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 二分图的最大匹配
- 代码测试、调试与优化小结
- pku3444
- Windows API编程之动态链接库(DLL)
- include,require,include_once,require_once之间的差别
- GCC for windows
- 二分图最大(基数)匹配以及与其等价的几个问题
- [转载]阅读一款3D引擎的方法备忘
- 浅谈JavaScript编程语言的编码规范
- Dotproject 测试地址
- 大整数加法
- malloc/free与new/delete的区别
- malloc()、free()、calloc() 與 realloc()
- gwt2.0国际化
- java设计模式【创建模式】之建造(Bulider)模式