标签:之间 span 根据 替换 最小 匹配 lin hungary 覆盖
之后会涉及到的概念有:
二分图.
匹配. 使每个点最多与其中一条边相邻的边集.
边覆盖集. 关联二分图的所有点的边集.
点覆盖集. 关联二分图的所有边的点集.
独立集. 二分图中互不关联的点集.
团. 两两关联的点集.
路径覆盖. 覆盖所有点的路径集.
对于任何一个概念, 我们可以提出三个层次的问题:
① 存在性层次.
是否存在.
构造一组可行解.
构造一组有特定要求的解.
② 计数层次.
有多少组解.
有多少组满足特定要求的解.
③ 求解层次.
求出所有的解.
定理1 |最大匹配| + |最小边覆盖| = |V| .
设边集 $C$ , 我们对边集 $C$ 动态地加入边, 直到 $C$ 为边覆盖, 尝试求出加边次数的最小值.
注意到每次加入边的时候, 只会有三种情况:
① 若两个端点都在 $C$ 中, 则这条边没有贡献.
② 若两个端点有一个在 $C$ 中, 则这条边多覆盖了一个点.
③ 若两个端点都不在 $C$ 中, 则这条边多覆盖了两个点.
显然, 我们可以这么贪心地想: 先尽可能的覆盖两个点, 然后再覆盖一个点. 于是, 我们先将最大匹配中的边加入 $C$ 中, 然后对于每个没有被覆盖的点, 找到一条边, 使得该边的另一个端点已经被覆盖. 这条边是一定能找到的, 否则当前的不是最大匹配.
所以 |最小边覆盖| = 2 |最大匹配| + (|V| - |最大匹配|) , 即 |最大匹配| + |最小边覆盖| = |V| .
定理2 独立集与点覆盖互补.
即证点覆盖的补集是独立集. 假设点覆盖的补集 $D$ 不是独立集, 那么 $D$ 中存在两个点 $u, v$ , 它们之间有连边 $(u, v)$ . 而 $u, v$ 不存在与点覆盖中, 根据点覆盖的定义, 矛盾.
也就是说, 我们有 |独立集| + |点覆盖| = |V| . 当最大化独立集的大小时, 点覆盖的大小最小, 因为我们得到了定理3.
定理3 |最大独立集| + |最小点覆盖| = |V| .
定理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| 是最小点覆盖.
匈牙利算法.
数量关系 |最小边覆盖| = |最大匹配| .
构造方案 求出最大匹配, 取所有最大匹配中的边. 对于没有覆盖的点, 任取一条不是匹配中的边.
数量关系 |最小点覆盖| = |最大匹配| .
构造方案 以右侧所有未匹配的点为起点, 找交错轨, 将访问到的点进行标记. 取所有左侧被标记的点, 和所有右侧未被标记的点.
数量关系 |最大独立集| = |V| - |最小点覆盖| = |V| - |最大匹配| .
构造方案 构建最小点覆盖, 取补集.
数量关系 |最大团| = |补图最大独立集| .
构造方案 取补图, 构造最大独立集.
在图 G 中,用最少的路径覆盖所有的点.
建模
在图 G 中,将每个点 i 拆成两个点 $x_i$ , $y_i$ , 构成二分图.
若 $(u,v) \in E$ , 则连边 $(x_u, y_v)$ .
若路径可以交叉, 则先求解传递闭包.
数量关系 |最小路径覆盖| = |V| - |最大匹配| .
构造方案
若存在匹配边 $x_u$ 向 $y_v$ , 说明有路径 $u->v$ .
问题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