首页 > 其他分享 >组合数学课程笔记(?):图的匹配

组合数学课程笔记(?):图的匹配

时间:2023-06-02 14:12:43浏览次数:38  
标签:二分 偏序 反链 匹配 覆盖 笔记 bigcup 数学课程

二分图匹配和霍尔定理

相异代表系

我们用一个相异代表系描述二分图匹配问题。我们有若干个集合 \(\{S_1,S_2,S_3,\cdots,S_m\}\),现在要给每个集合选定一个代表 \(x_i\in S_i\),并且每个 \(x_i\) 是相异的。

容易发现这个问题和二分图匹配问题是等价的。

霍尔定理

  • 对于 \(m\) 个集合,如果它们存在一个相异代表系,等价于对于任何的 \(I\subseteq \{S_1,S_2,\cdots,S_m\}\),都有 \(|\bigcup_{i\in I}S_i|\ge |I|\)。

首先,必要性是明显的,如果存在一个 \(I\) 不满足,那么显然对于这个子问题无解。然后就是要证明充分性,也就是只要有 \(\forall I,|\bigcup_{i\in I}S_i|\ge |I|\),都存在一个相异代表系。

数学归纳法

假设条件对任意 \(n\lt m\) 成立,考虑规模为 \(n\) 的子问题。我们定义 \(|\bigcup_{i\in I}S_i|=|I|\) 的集合 \(I\) 是特殊的。那么,我们按照当前集合是否存在特殊的子集分类。如果不存在,我们可以随便选择一个集合和它内部的任何的点。因为任何的 \(|\bigcup_{i\in I}S_i|>|I|\),所以在两边都至多减去 \(1\) 个之后依旧有 \(|\bigcup_{i\in I}S_i|\ge|I|\)。这就是规模 \(n-1\) 的子问题,得证。

我们需要处理的是存在特殊集合的子问题。首先,因为 \(|\bigcup_{i\in I}S_i|=|I|\),所以这一块很明显变成了独立的子问题。\(\bigcup_{i\in I}S_i\) 外面的不可能和里面匹配(否则里面的就不够用了),里面又不能和外面匹配。那么我们的问题就被划分成 \(I\) 和 \(X/I\) 两部分。而 \(I\) 里面的子集都是原来的子集,\(I\) 是显然满足条件的。我们只需要验证 \(X/I\) 满足霍尔条件。

我们发现,对 \(X/I\) 里的任何子集 \(J\),考虑它和我们取走的特殊子集 \(I\),有 \(|\bigcup_{i\in I}S_i\cup\bigcup_{i\in J}S_i|\ge |I\cup J|\)。因为 \(I\) 和 \(J\) 很明显不交,所以 \(|I\cup J|=|I|+|J|\)。所以 \(|\bigcup_{i\in I}S_i|+|\bigcup_{i\in J}S_i|\ge |\bigcup_{i\in I}S_i\cup\bigcup_{i\in J}S_i|\ge |I\cup J|=|I|+|J|\)。因为 \(|\bigcup_{i\in I}S_i|=|I|\),所以 \(|\bigcup_{i\in J}S_i|\ge |J|\)。也就是 \(X/I\) 同样满足霍尔条件,得证。

原始对偶现象

二分图最大匹配=二分图最小点覆盖

矩阵形式

我们把二分图的邻接矩阵写出来。则二分图最大匹配等价于找到最多的 \(1\) 使得它们的行和列互不相同。二分图最小点覆盖等价于选择一些行和一些列覆盖所有的 \(1\),是选中的行和列总和最少。

证明

证明最小点覆盖不小于最大匹配是简单的。\(a\) 个独立的 \(1\) 至少需要 \(a\) 行或列覆盖。那么我们需要证明最小点覆盖不大于最大匹配,就能证明两者相等。我们考虑把最小点覆盖选定的行和列置换到前面,则我们的矩阵变成只有前 \(a\) 行和前 \(b\) 列有值(二者满足其一即可)。然后我们把前 \(a\) 行右边的部分扒出来,证明在这个子矩阵中一定存在 \(a\) 个独立的 \(1\)。如果存在,对偶的对最下角也成立,所以就存在 \(a+b\) 个独立的 \(1\)。得证。如果不存在,那么首先,如果有某一行没有,除掉这一行也不会有影响。如果有的列少于 \(a\),那么全部用列覆盖显然更优,都和当前是最小点覆盖的假设矛盾。所以每一行每一列都有 \(a\),根据霍尔定理,也就一定存在 \(a\) 个独立的 \(1\)。

得证二分图最大匹配等于二分图最小点覆盖。

平面图

平面图最大匹配可以用带花树算法在多项式时间内解决,平面图最小点覆盖则是 \(NP-hard\) 的。不过,我们可以证明最小点覆盖在最大匹配和二倍最大匹配之间,这是显然的。

偏序集最大反链=偏序集最小链覆盖

偏序集图就是如果 \(a\rightarrow b\) 有边 \(b\rightarrow c\) 有边则 \(a\rightarrow c\) 有边的图。

偏序集图上的一条链就是所有的元素相继有边的点集。偏序集图上的一个反链是任何元素都没有边的点集。

考虑画二分图,每个点在左右都对应画一个边。如果 \(u\rightarrow v\) 有边,就在二分图上连一个 \(v_{left}\leftarrow u_{right}\)。根据二分图最大匹配等于二分图最小点覆盖,这张图同样满足性质。

然后我们研究反链,我们发现其实就是点覆盖中选了的点一定是反链中没有的。所以最大反链是点总数减去最小点覆盖。

之后研究链。我们把每个相对的 \(u_{left}\) 和 \(u_{right}\) 连一条虚边,然后从第一个点开始往下走路径。我们发现,当前不能往下走当且仅当当前点没有匹配。所以链的个数就是在最大匹配中没有匹配到的点的个数,是点总数减去最大匹配。

得证二者相等。

霍尔定理

我们再用这个定理推回霍尔定理。我们发现我们可以把相异代表系理解成一个二层的偏序图,每个元素向集合连边当且仅当集合包含它。

我们发现,当前元素的相异代表系是一个链覆盖,并且是最小链覆盖。所以我们只需要证明满足霍尔条件时,这个偏序图的最大反链是 \(n\) 即可。

假设最大反链中,选择的所有的集合一共 \(k\) 个,因为霍尔条件,它们至少连到 \(k\) 个元素,这些都不能选。所以反链的大小不超过 \(n-k+k=n\)。同时还存在所有元素集合作为一个大小为 \(n\) 的反链,所以得到最大反链是 \(n\),最大匹配是 \(n\),充分性证明,霍尔定理得证。

鸽笼原理

我们之前证明过 \(mn+1\) 的序列要么存在 \(m+1\) 的不降序列,要么存在 \(n+1\) 的降序列。现在用这个定理可以方便的证明。我们在 \(a_i\le a_j(i<j)\) 的 \(i,j\) 之间连边,否则不连。那么不降序列就是一个链,降序列就是一个反链。而最小的不降序列覆盖和反链大小相等。而如果反链大小 \(\gt n\),直接成立。否则,我们要用 \(\le n\) 个序列覆盖 \(nm+1\),根据鸽笼原理一定会有一个序列超过 \(m\)。也就得证。

标签:二分,偏序,反链,匹配,覆盖,笔记,bigcup,数学课程
From: https://www.cnblogs.com/jucason-xu/p/17451487.html

相关文章

  • Java官方笔记5数字和字符串
    NumbersNumber的子类:另外还有BigDecimal和BigInteger,用于高精度计算,AtomicInteger和AtomicLong用于多线程应用。我们有时候需要用包装类而非基本数据类型,理由如下:方法入参类型为Object,只能传入对象使用包装类提供的常量,比如MIN_VALUE和MAX_VALUE使用包装类的方法来做......
  • Ubuntu 使用笔记
    Ubuntu使用笔记这篇学习笔记将用于记录本人在使用Ubuntu系统过程中的学习心得,它会被存储在在https://github.com/owlman/study_note项目的OperatingSystem/UNIX-like/Linux/目录下一个名为的Distribution目录中。使用Linux的动机和理由第一,非IE浏览器市场成熟了,比如网......
  • Java官方笔记4类和对象
    创建类定义类Bicycle:publicclassBicycle{//theBicycleclasshas//threefieldspublicintcadence;publicintgear;publicintspeed;//theBicycleclasshas//oneconstructorpublicBicycle(intstartCadence,intstar......
  • 新星计划|项目实训|SSM旅游网项目实战笔记一
    应邀请,特委派公司开发负责人张老师带队新星计划:SSM旅游网项目实训。现将实训的相关笔记分期发放,以供参考。如需要相关资料,可以博客尾部添加微信获取。一、实训介绍实训目的:其实通过实际的项目来检验大家的理论水平和实操水平,并同时通过实际的项目来积相应的项目经验。IT行业:主要特......
  • 考古笔记11:网络地址转换NAT(3)-设定环节
    接续上一节的实验,本节将正式进入NAT的配置设定环节。本节内容是在上节内容的基础上进行的。拓扑-NAT实施前   至此,大家应该已经可以看到路由器端(也就是逻辑上的ISP维护端)已全部打通;      但是,这个时候我们会发下另一个问题:      PC1或者PC3(PC2因为在R1上未配置......
  • 0002-array笔记
    目录std::array的size()是编译期确定的,不可改变大小std::span和std::array区别展开查看`span`是一个轻量级的容器,可以包装任意类型和大小的连续内存区域,它并不拥有所包装的内存,只是提供了对这些内存的非拥有式视图`span`的作用是提供对一段内存的访问,而不是管理一......
  • 人月神话阅读笔记3
    在之前我的阅读笔记(读后感)更新到2就没有更新了,大概是忘记继续读这本书,转身去读构建之法了。今天来写一篇人月神话的阅读笔记。简单杂碎的记一些重点之前读到了第五章的画蛇添足第六章是贯彻执行设计结果必须由一个人或两个人完成,以确保这些决定是一致的。手册形式化定义......
  • 构建之法阅读笔记06
    9.1PM是啥软件团队里除了能写代码、测试代码和画图做设计的成员,还有一类角色,不做上面这些事情但也很重要,我们叫他们项目经理——PM ProductManager:产品经理——正确地做产品ProjectManager:项目经理——正确地做流程ProgramManager:微软的职位名称 微软产品团队三足鼎立......
  • 构建之法阅读笔记3
    下面这些都是按照顺序整理的一些零碎的阅读笔记,可能看起来毕竟杂乱,同时也阅览了网上的一些其他的阅读笔记进行借鉴。读完这本书,感觉并不是只讲软件工程,或者说并不像我想象的那些。但是至少我读到了一些东西,获得了一些知识。一图胜千言文学化编程:写文档,时不时写些代码设计的......
  • 格路计数学习笔记
    格路计数学习(抄写)笔记\(2\)\(\operatorname{Dyck}\)路\(2.1\) 格路​ 定义2.1在平面直角坐标系中,横坐标和纵坐标都是整数的点称为格点,平面格路是指从一个格点到另一格点只走格点的路,格路的长度是指其所走的路的步数。\(2.2\) 自由路​ 定义\(2.2\)对于一条从\((0......