码迷,mamicode.com
首页 > 其他好文 > 详细

二分图相关

时间:2017-10-03 12:05:51      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:之间   span   根据   替换   最小   匹配   lin   hungary   覆盖   

1. 二分图相关概念

  之后会涉及到的概念有:

  二分图.

  匹配.      使每个点最多与其中一条边相邻的边集.

  边覆盖集.    关联二分图的所有点的边集.

  点覆盖集.    关联二分图的所有边的点集.

  独立集.     二分图中互不关联的点集.

  团.       两两关联的点集.

  路径覆盖.    覆盖所有点的路径集.

 

  对于任何一个概念, 我们可以提出三个层次的问题:

  ① 存在性层次.

    是否存在.

    构造一组可行解.

    构造一组有特定要求的解.

  ② 计数层次.

    有多少组解.

    有多少组满足特定要求的解.

  ③ 求解层次.

    求出所有的解.

2. 概念之间的三组关系

2.1. 最大匹配与最小边覆盖

  定理1  |最大匹配| + |最小边覆盖| = |V| .

  设边集 $C$ , 我们对边集 $C$ 动态地加入边, 直到 $C$ 为边覆盖, 尝试求出加边次数的最小值.

  注意到每次加入边的时候, 只会有三种情况:

    ① 若两个端点都在 $C$ 中, 则这条边没有贡献.

    ② 若两个端点有一个在 $C$ 中, 则这条边多覆盖了一个点.

    ③ 若两个端点都不在 $C$ 中, 则这条边多覆盖了两个点.

  显然, 我们可以这么贪心地想: 先尽可能的覆盖两个点, 然后再覆盖一个点. 于是, 我们先将最大匹配中的边加入 $C$ 中, 然后对于每个没有被覆盖的点, 找到一条边, 使得该边的另一个端点已经被覆盖. 这条边是一定能找到的, 否则当前的不是最大匹配.

  所以 |最小边覆盖| = 2 |最大匹配| + (|V| - |最大匹配|) , 即 |最大匹配| + |最小边覆盖| = |V| .

2.2. 最大独立集与最小点覆盖

  定理2  独立集与点覆盖互补.

  即证点覆盖的补集是独立集. 假设点覆盖的补集 $D$ 不是独立集, 那么 $D$ 中存在两个点 $u, v$ , 它们之间有连边 $(u, v)$ . 而 $u, v$ 不存在与点覆盖中, 根据点覆盖的定义, 矛盾.

 

  也就是说, 我们有 |独立集| + |点覆盖| = |V| . 当最大化独立集的大小时, 点覆盖的大小最小, 因为我们得到了定理3.

  定理3  |最大独立集| + |最小点覆盖| = |V| .

2.3. 最大匹配与最小点覆盖 (Konig定理)

  定理4 (Konig定理)  二分图中, |最大匹配| = |最小点覆盖| .

  我们以右边所有未匹配的点为起点, 找交错轨, 并将访问到的所有点进行标记.

  记点集 S 为左边所有被标记的点, 和右边所有未被标记的点的并集, 尝试证明 S 就是最小点覆盖.

 

  我们先给出一些关于该标记算法的命题, 以加深理解, 同时用于证明该定理:

  命题1  右边未被标记的点一定在匹配中.

  反设右边某个未被标记的点不在匹配中, 那么它会被作为起点进行标记.

  命题2  除了标记的起点外, 所有标记的点都在匹配中.

  命题3  当左侧点 X 被标记, 能够由左往右标记 Y , 当且仅当 (X, Y) 是匹配边.

        右侧点 Y 被标记, 要么 Y 是起点, 那么是 X 从左往右标记得到的.

  命题4  当右侧点 Y 被标记, 能够由右往左标记 X , 当且仅当 (Y, X) 是未匹配边.

        左侧点 X 被标记, 只可能是 Y 从右往左标记得到的.

  命题5  不可能存在一条边, 左侧点 X 未被标记, 右侧点 Y 被标记.

  反设存在这条边, 根据命题4, 这条边一定是匹配边, 否则 X 会被标记. 而根据命题3 , Y 不可能是起点, 且 Y 不可能是 X 从左往右标记的, 所以矛盾.

 

  首先, 我们可以证明 |S| = |最大匹配| .

  我们尝试证明点集 |S| 中的每一个点都在最大匹配中, 且每一条匹配边中有且仅有 |S| 中的一个点.

  点集 |S| 中的每一个点都在最大匹配中. 当该点是右侧未标记的点时, 根据命题1, 它一定在匹配中. 当该点是左侧标记的点时, 根据命题2和命题4, 所以它一定在匹配中.

  每一条匹配边中有 |S| 中的至少一个点. 反设没有, 那么该匹配边 (X, Y) , X 没有被标记, Y 被标记, 根据命题5矛盾.

  每一条匹配边中最多有 |S| 中的一个点. 反设两个, 那么该匹配边 (X, Y) , X 被标记, Y 没有被标记, 根据命题4 , Y 会被 X 标记.

 

  然后, 我们证明 S 为点覆盖.

  反设存在一条边 (X, Y) , X 和 Y 都不在 |S| 中, 那么 X 未被标记, Y 被标记, 根据命题5, 矛盾.

 

  最后, 我们证明 S 为最小点覆盖.

  我们最少需要 |最大匹配| 个点来覆盖所有的匹配边, 所以至少需要 |最大匹配| 个点来覆盖所有边, 而我们已经取得 |S| = |最大匹配| , 所以 |S| 是最小点覆盖.

3. 解决方法汇总

3.1. 最大匹配

  匈牙利算法.

3.2. 二分图最小边覆盖

  数量关系  |最小边覆盖| = |最大匹配| .

  构造方案  求出最大匹配, 取所有最大匹配中的边. 对于没有覆盖的点, 任取一条不是匹配中的边.

3.3. 二分图最小点覆盖

  数量关系  |最小点覆盖| = |最大匹配| .

  构造方案  以右侧所有未匹配的点为起点, 找交错轨, 将访问到的点进行标记. 取所有左侧被标记的点, 和所有右侧未被标记的点.

3.4. 二分图最大独立集

  数量关系  |最大独立集| = |V| - |最小点覆盖| = |V| - |最大匹配| .

  构造方案  构建最小点覆盖, 取补集.

3.5. 二分图最大团

  数量关系  |最大团| = |补图最大独立集| .

  构造方案  取补图, 构造最大独立集.

3.6. 最小路径覆盖

  在图 G 中,用最少的路径覆盖所有的点.

  建模

  在图 G 中,将每个点 i 拆成两个点 $x_i$ , $y_i$ , 构成二分图.

  若 $(u,v) \in E$ , 则连边 $(x_u, y_v)$ .

  若路径可以交叉, 则先求解传递闭包.

  数量关系  |最小路径覆盖| = |V| - |最大匹配| .

  构造方案

  若存在匹配边 $x_u$ 向 $y_v$ , 说明有路径 $u->v$ .

4. 最优字典序与存在性

  问题1  求第一维最小字典序的解.

  直接进行 Hungary .

  问题2  求第二维最小字典序的解.

  跑 Hungary , 尝试删匹配边, 继续增广, 如果找得到就更新, 处理完每个点后删去当前点, 匹配点.

  问题3  一定在最大匹配中的点.

  删点, 增广, 若不能增广那么一定在最大匹配中.

  问题4  可能在最大匹配中的点.

  逗你玩的.

  所有点.

  对于最大匹配中的点显然.

  对于不在最大匹配中的点, 我们能够找到一条交错轨, 沿着交错轨进行替换就好了.

  问题5  一定在最大匹配中的边.

  跑 Hungary .

  对于匹配边 (X, Y) , 定向 X -> Y .

  对于非匹配边 (X, Y) , 定向 X <- Y .

  两端不在同一个强联通分量的边一定在最大匹配中.

二分图相关

标签:之间   span   根据   替换   最小   匹配   lin   hungary   覆盖   

原文地址:http://www.cnblogs.com/Sdchr/p/7544165.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!