二分图匹配和霍尔定理
相异代表系
我们用一个相异代表系描述二分图匹配问题。我们有若干个集合 ,现在要给每个集合选定一个代表 ,并且每个 是相异的。
容易发现这个问题和二分图匹配问题是等价的。
霍尔定理
- 对于 个集合,如果它们存在一个相异代表系,等价于对于任何的 ,都有 。
首先,必要性是明显的,如果存在一个 不满足,那么显然对于这个子问题无解。然后就是要证明充分性,也就是只要有 ,都存在一个相异代表系。
数学归纳法
假设条件对任意 成立,考虑规模为 的子问题。我们定义 的集合 是特殊的。那么,我们按照当前集合是否存在特殊的子集分类。如果不存在,我们可以随便选择一个集合和它内部的任何的点。因为任何的 ,所以在两边都至多减去 个之后依旧有 。这就是规模 的子问题,得证。
我们需要处理的是存在特殊集合的子问题。首先,因为 ,所以这一块很明显变成了独立的子问题。 外面的不可能和里面匹配(否则里面的就不够用了),里面又不能和外面匹配。那么我们的问题就被划分成 和 两部分。而 里面的子集都是原来的子集, 是显然满足条件的。我们只需要验证 满足霍尔条件。
我们发现,对 里的任何子集 ,考虑它和我们取走的特殊子集 ,有 。因为 和 很明显不交,所以 。所以 。因为 ,所以 。也就是 同样满足霍尔条件,得证。
原始对偶现象
二分图最大匹配=二分图最小点覆盖
矩阵形式
我们把二分图的邻接矩阵写出来。则二分图最大匹配等价于找到最多的 使得它们的行和列互不相同。二分图最小点覆盖等价于选择一些行和一些列覆盖所有的 ,是选中的行和列总和最少。
证明
证明最小点覆盖不小于最大匹配是简单的。 个独立的 至少需要 行或列覆盖。那么我们需要证明最小点覆盖不大于最大匹配,就能证明两者相等。我们考虑把最小点覆盖选定的行和列置换到前面,则我们的矩阵变成只有前 行和前 列有值(二者满足其一即可)。然后我们把前 行右边的部分扒出来,证明在这个子矩阵中一定存在 个独立的 。如果存在,对偶的对最下角也成立,所以就存在 个独立的 。得证。如果不存在,那么首先,如果有某一行没有,除掉这一行也不会有影响。如果有的列少于 ,那么全部用列覆盖显然更优,都和当前是最小点覆盖的假设矛盾。所以每一行每一列都有 ,根据霍尔定理,也就一定存在 个独立的 。
得证二分图最大匹配等于二分图最小点覆盖。
平面图
平面图最大匹配可以用带花树算法在多项式时间内解决,平面图最小点覆盖则是 的。不过,我们可以证明最小点覆盖在最大匹配和二倍最大匹配之间,这是显然的。
偏序集最大反链=偏序集最小链覆盖
偏序集图就是如果 有边 有边则 有边的图。
偏序集图上的一条链就是所有的元素相继有边的点集。偏序集图上的一个反链是任何元素都没有边的点集。
考虑画二分图,每个点在左右都对应画一个边。如果 有边,就在二分图上连一个 。根据二分图最大匹配等于二分图最小点覆盖,这张图同样满足性质。
然后我们研究反链,我们发现其实就是点覆盖中选了的点一定是反链中没有的。所以最大反链是点总数减去最小点覆盖。
之后研究链。我们把每个相对的 和 连一条虚边,然后从第一个点开始往下走路径。我们发现,当前不能往下走当且仅当当前点没有匹配。所以链的个数就是在最大匹配中没有匹配到的点的个数,是点总数减去最大匹配。
得证二者相等。
霍尔定理
我们再用这个定理推回霍尔定理。我们发现我们可以把相异代表系理解成一个二层的偏序图,每个元素向集合连边当且仅当集合包含它。
我们发现,当前元素的相异代表系是一个链覆盖,并且是最小链覆盖。所以我们只需要证明满足霍尔条件时,这个偏序图的最大反链是 即可。
假设最大反链中,选择的所有的集合一共 个,因为霍尔条件,它们至少连到 个元素,这些都不能选。所以反链的大小不超过 。同时还存在所有元素集合作为一个大小为 的反链,所以得到最大反链是 ,最大匹配是 ,充分性证明,霍尔定理得证。
鸽笼原理
我们之前证明过 的序列要么存在 的不降序列,要么存在 的降序列。现在用这个定理可以方便的证明。我们在 的 之间连边,否则不连。那么不降序列就是一个链,降序列就是一个反链。而最小的不降序列覆盖和反链大小相等。而如果反链大小 ,直接成立。否则,我们要用 个序列覆盖 ,根据鸽笼原理一定会有一个序列超过 。也就得证。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现