匹配相关问题解释

二分图:

二分图又称二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A, j in B), 则称图G是二分图。

匹配:

给定一个二分图,在G的一个子图G’中,如果G’的边集中的任意两条边都不依附于同一个顶点,则称G’的边集为G的一个匹配

最大匹配:

在所有的匹配中,边数最多的那个匹配就是二分图的最大匹配了

顶点覆盖:

在顶点集合中,选取一部分顶点,这些顶点能够把所有的边都覆盖了。这些点就是顶点覆盖集

最小顶点覆盖:

在所有的顶点覆盖集中,顶点数最小的那个叫最小顶点集合。

独立集:

在所有的顶点中选取一些顶点,这些顶点两两之间没有连线,这些点就叫独立集

最大独立集:

在所有的独立集中,顶点数最多的那个集合

路径覆盖:

在图中找一些路径,这些路径覆盖图中所有的顶点,每个顶点都只与一条路径相关联。

最小路径覆盖:

在所有的路径覆盖中,路径个数最小的就是最小路径覆盖了。

对最小路径覆盖解释:

最小路径覆盖也称为最小边覆盖,是指用尽量少的不相交简单路径覆盖二分图中的所有顶点

个PXP的有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每条路径就是一个弱连通子集.

由上面可以得出:
1.一个单独的顶点是一条路径;
2.如果存在一路径p1,p2,......pk,其中p1 为起点,pk为终点,那么在覆盖图中,顶点p1,p2,......pk不再与其它的顶点之间存在有向边.
对于一个路径覆盖,有如下性质:
1、每个顶点属于且只属于一个路径。
2、路径上除终点外,从每个顶点出发只有一条边指向路径上的另一顶点。
路径覆盖与 二分图匹配的关系(必须是有向无环图):
最小路径覆盖=|P|-最大匹配数
其中最大匹配数的求法是把P中的每个顶点pi分成两个顶点pi'与pi'',如果在p中存在一条pi到pj的边,那么在二分图P'中就有一条连接pi'与pj''的无向边;这里pi' 就是p中pi的出边,pj''就是p中pj 的一条入边;
对于 公式:最小路径覆盖=|P|-最大匹配数;可以这么来理解;
如果匹配数为零,那么P中不存在有向边,于是显然有:
最小路径覆盖=|P|-最大匹配数=|P|-0=|P|;即P的最小路径覆盖数为|P|;
P'中不在于匹配边时,路径覆盖数为|P|;
如果在P'中增加一条匹配边pi'-->pj'',那么在图P的路径覆盖中就存在一条由pi连接pj的边,也就是说pi与pj 在一条路径上,于是路径覆盖数就可以减少一个;
如此继续增加匹配边,每增加一条,路径覆盖数就减少一条;直到匹配边不能继续增加时,路径覆盖数也不能再减少了,此时就有了前面的公式;但是这里只 是说明了每条匹配边对应于路径覆盖中的一条路径上的一条连接两个点之间的有向边;下面来说明一个路径覆盖中的每条连接两个顶点之间的有向边对应于一条匹配 边;
与前面类似,对于路径覆盖中的每条连接两个顶点之间的每条有向边pi--->pj,我们可以在匹配图中对应做一条连接pi'与pj''的边, 显然这样做出来图的是一个匹配图(这一点用反证法很容易证明,如果得到的图不是一个匹配图,那么这个图中必定存在这样两条边 pi'---pj'' 及 pi' ----pk'',(j!=k),那么在路径覆盖图中就存在了两条边pi-->pj, pi--->pk ,那边从pi出发的路径就不止一条了,这与路径覆盖图是矛盾的;还有另外一种情况就是存在pi'---pj'',pk'---pj'',这种情况也类似可证);
至此,就说明了匹配边与路径覆盖图中连接两顶点之间边的一一对应关系,那么也就说明了前面的公式成立!


熟悉了这些概念之后,还有一个二分图最大匹配的König定理,这个定理的内容是:最大匹配 = 最小顶点覆盖。此处不证明其正确性。有了这个定理之后还可以得出一些二分图特有的公式:

最大独立集 = 顶点个数 – 最小顶点覆盖(最大匹配)

最小路径覆盖 = 顶点个数 - 最大匹配

这个公式,我们可以利用最大匹配来找到最大的独立集。而最大独立集和最小路径覆盖有个千丝万缕的关系。

对于二分图的最大匹配,常用的求解方法是hungarian算法和最大流算法。以poj上的题目为例说明:

POJ2271: 题目大意是,一群男孩和女孩共N人,某些男孩和女孩之间会发生恋爱关系(满足一定的关系),现在希望找到最多的孩子,他们之间不会发生恋爱关系。

分析:找到最多的孩子,没有恋爱关系,这实质上是找最大独立集。假设男孩在左有a个,女孩在右有b个,那么如果某男孩和某女孩之间有关系,就连线。最大独立集就是找到最多顶点,顶点之间没有联系,正好就是所求,而最大独立集就是 N-最大匹配,所以问题得到解决。试想,如果二分图中没有连线,那么所有的孩子都可选,最大独立集也是N,他们是等价的。如果存在一条连线,那么去掉一个孩子就是所找的孩子,最大独立集此时是N-1.依次类推。在试想,最大匹配其实就找到了几对恋爱对象,假设是这样的

a b

B0 G0

B1 G1

… …

Bi Gi

… …

我们只需要把他们的另一半去掉,就是我们找的孩子。不过会有这样的疑问,如果我取出了B1的另一半G1,B1会不会和其余的孩子恋爱呢,比如说B1和b会恋爱,那么好吧,去掉G1的另一半B1,这样就不会有问题了吧。还有担心?G1会不会和其余的孩子恋爱呢,比如说G1和a会恋爱,不过这样的情况是不会出现的。假如G1和a好,B1和b好,那么最大匹配中出现的是两条边G1->a B1->b,而不是现在的B1和G1.所以,既然最大匹配中选择了B1和G1,去掉他们中间的一个肯定是可行的。所以答案就是N-最大匹配了。

POJ3692:题目大意是,一群男孩B个(他们互相认识),一群女孩G个(他们互相认识),某些男孩和某些女孩相识,现在找出最多的孩子,他们互相认识

分析:这个题目和上面的有些相似。对于利用二分图最大匹配算法解题最重要不是匹配算法本身,而是如何问题转化为二分图模型。一旦模型建立,就很容易了。题目要找的是一群孩子,他们之间都互相认识,也就是说这是一个团(图的概念,任意两个顶点之间都有连线)。可是如果直接去找团,可能比较麻烦。因为这是二分图,自然要利用二分图的性质。在二分图的算法里面没有找团的相关算法,所以我们可以考虑反问题,找出最多的孩子,他们之间互不认识,这不是就是求最大独立集嘛。建立这样的二分图,左边是男孩,右边是女孩,如果男孩和女孩不认识就连上边,在这样的二分图中,找最大独立集,其实就是找出所有的相互认识的孩子了。接下来就很容易了。此题说明模型的转化和构图很重要。

POJ3041:题目大意是,一个矩阵,某些位置有小行星,有一种炸弹,一次可以炸掉一行或者一列,现在问题是需要最少用多少这样的炸弹。

分析:模型转化,非常巧妙的利用二分图来解决。利用二分图必须有左顶点和右顶点,我们把行作为左顶点,列作为右顶点,如果该行和该列的交点有小行星,就连线。求此二分图的最大匹配就是了。对这个问题展开思考,为什么可以这么转化。其实从最小顶点覆盖的角度来想比较好理解,左边的顶点和右边的顶点只有当有小行星的时候才有连线,那么只要找到最少的顶点把所有的边覆盖了,那么就是所求的解了。最小顶点覆盖等值于最大匹配

POJ1466:题目大意是,一群人N,某人可能是多某些人有罗曼史,性别未知,但一定是异性。找出最多的同学,他们之间无罗曼史

分析:因为性别未知,所以可以把所有的人当成左顶点,右边也是所有的人,建立二分图,可以想象,这样求出来的最大匹配是男女分开建立的二分图的最大匹配的二倍。而题目让找最大独立集,所以应该是N-最大匹配/2;

POJ1325:题目大意是,有两台机器,有多个任务,每个任务都可在这两台机器上运行,不过不同的模式需要重启电脑,很浪费时间,现在要找出最好的调度方式,减少调度时间。

分析:最少的顶点覆盖最多的边(任务),所以是最小顶点覆盖问题

POJ2060:题目大意,有很多人预订出租车,如果出租车做完一个任务能够敢到下一个任务,就不需要在调度一辆出租车了,现在请问最少需要几辆出租车。

分析:最小路径问题,对任务构图,将一个任务拆开成两个点,建立二分图,如果一个任务能够完成之后赶到下个任务就连线,然后就是二分图问题了。最小路径等值于二分图的最大独立集

POJ2226:和3041相似,不过这里不是销毁一行或者一列,一次只能销毁连着的一行或者一列。可以把所有的行连续的段拿出来作为左顶点,所有的列连续的段拿出来作为右顶点,如果左段与右段之间有相交,就连线。然后求最小顶点覆盖

POJ1422:最小路径覆盖

POJ2594:特殊的最小路径覆盖,每个顶点可以有多条路径经过,这时需要事先把任意两点之间是否能够到达求出,然后在求路径覆盖。
POJ1548:最小路径覆盖

POJ3216:最小路径覆盖

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值