乙巳年四月初七闲话

之前报名了离散数学的习题课,今天下午去试讲被劈头盖脸地批评了一顿。好气好气。

毕竟最近讲了二分图和网络流相关的内容。我寻思习题课上讲讲二分图匹配的应用也好。

看了看同报名的同学们的选题,都是什么谱图定理,什么hopcroft-tarjan算法,什么km算法,什么预流推进算法,花里胡哨的有什么用!你二分图匹配真的理解了吗!

这是俺准备的内容(ppt里直接导出的):

目录
二分图最小点覆盖
二分图最大独立集
二分图最小边覆盖
棋盘多米诺覆盖
棋盘放车
DAG最小路径覆盖
二分图博弈

二分图最小点覆盖
对于图 𝐺=(𝑉,𝐸),若点集 V′⊆𝑉 满足 𝐸 中任意一条边都与 𝑉¡ä 中的点相关联,则称 𝑉¡ä 为图 𝐺 的一个点覆盖。求最小点覆盖数。
结论:二分图最小点覆盖数 = 最大匹配数
证明:
课上给出了通过邻接矩阵的证明(书中定理 5.2.3),下面给出另一种证明。
对于二分图 𝐺,首先求出 𝐺 的一个最大匹配 𝑀,由于 𝑀 中任意两条边互不相邻,所以 𝑀 中每条边的两个端点中都要至少选取一个点在点覆盖中。所以最小点覆盖数 ≥ 最大匹配数。
然后构造一个点覆盖达到该下界。

二分图最小点覆盖
构造过程:从右部的一个非匹配点出发,寻找增广路。由于当前是最大匹配,一定寻找失败,最后以一条匹配边结尾。遍历所有这样的路径,标记路径上的所有点。
取左部的标记点和右部的未标记点,构成 𝐺 的一个最小点覆盖。

Q1:该点覆盖是否覆盖了所有边?
Q2:该点覆盖的点数是否等于最大匹配数?

二分图最小点覆盖
Q1:该点覆盖是否覆盖了所有边?
性质1:连通的匹配点同时被标记或者同时不被标记。
性质2:左部的非匹配点一定未被标记,右部的非匹配点一定被标记。
对每条边分类讨论:
1. 两个端点都是匹配点——同时被标记或者同时不被标记;
2. 两个端点都是非匹配点——不存在,否则不是最大匹配;
3. 左端点是匹配点,右端点是非匹配点——同时被标记,否则路径未遍历全;
4. 左端点是非匹配点,右端点是匹配点——同时不被标记,否则找到增广路。
由于每条边两个端点同色,一定可以被覆盖。

二分图最小点覆盖
Q2:该点覆盖的点数是否等于最大匹配数?
左部的标记点和右部的未标记点都是匹配点。
对每一个匹配边,由于两个端点同时被标记或者同时不被标记,所以恰有一个端点被选。
因此构造了一个最小点覆盖使得其点数等于最大匹配数。

二分图最大独立集
对于图 𝐺=(𝑉,𝐸),若点集 V′⊆𝑉 满足 𝑉¡ä 中任意两点不相邻,则称 𝑉¡ä 为图 𝐺 的一个独立集。求最大独立集大小。
结论:二分图最大独立集大小 = 总点数 - 最小点覆盖数
证明:
设 𝐶⊆𝑉 是 𝐺 的最小点覆盖,𝐸 中任意一条边都至少有一个端点在 𝐶 中。考虑 𝐶 的补集 𝐼=𝑉∖𝐶, 𝐸 中任意一条边都至多有一个端点在 𝐼 中,所以不存在边连接两个 𝐼 中的点。
Q:独立集 𝐼 最大?
假设存在更大的独立集 𝐼¡ä,取补集  𝐶﷮′﷯=𝑉∖𝐼′,容易证明 𝐶¡ä 是点覆盖且   𝐶﷮′﷯﷯<|𝐶|,矛盾。因此 𝐼 是最大独立集。

二分图最小边覆盖
对于图 𝐺=(𝑉,𝐸),若边集 E′⊆𝐸 满足 𝑉 中任意一个点都与 E′ 中的边相关联,则称 E′ 为图 𝐺 的一个边覆盖。求最小边覆盖数。
结论:二分图最小边覆盖数 = 总点数 - 最大匹配数
证明:
往一个边集 𝐹 中逐个加入边,称加入边 𝑒 后新覆盖的点为 𝑒 标记的点。
先加入最大匹配 𝑀,每个边标记两个点。剩下的非匹配点每个点再用一条边标记,得到一个边覆盖。 𝐹﷯= 𝑀﷯+  V﷯−2 𝑀﷯﷯= 𝑉﷯−|𝑀|.
Q:边覆盖 𝐹 最小?
𝐹 中有  𝑀﷯ 条边均标记了 2 个点,剩下的  𝐹﷯−|𝑀| 标记了 1 个点。若存在更小的边覆盖 𝐹¡ä,则 𝐹¡ä 有超过 |𝑀| 条边标记了 2 个点,这对应一个比 𝑀 更大的匹配,矛盾。

棋盘多米诺覆盖
给定一个 𝑁 行 𝑀 列的棋盘,已知某些位置禁止放置,在上面放 1×2 的多米诺骨牌,问最多能放多少块?

Tips:每个格子被至多一个骨牌覆盖,每个骨牌恰好覆盖两个格子。
对棋盘进行黑白染色,则格子可以分为 𝑋,𝑌 两部。
任意两个相邻的格子颜色不同,在二分图中连一条 𝑋 到 𝑌 的边。
在这两个格子上放一块骨牌对应于选择该边为匹配边。
对二分图 (𝑋,𝑌,𝐸) 求最大匹配数,就是最多能放置的多米诺骨牌数。

棋盘放车
给定一个 𝑁 行 𝑀 列的棋盘,已知某些位置禁止放置,问最多能放多少个不能相互攻击的车?(车的攻击范围是所在行和所在列。)

Tips:每个行/列至多有一个车,每个车恰好占据一个行和一个列。
将行作为左部点,列作为右部点。
每个空位 (𝑖,𝑗) 看做左部点  𝑥﷮𝑖﷯ 与右部点  𝑦﷮𝑗﷯ 之间的连边。
在该位置放车,对应于二分图中选择该边为匹配边。
求最大匹配数,就是最多能放的车数。


DAG最小路径覆盖1
在有向无环图(DAG)上用若干条互不相交的路径(可以包含一个点)来覆盖所有点,问最少用多少条路径?

先将每一个点看作一个单独的路径,然后每选一条边代表合并两条路径为一条。
要选择尽可能多的边,且没有任意两条边从一个点出发,或者汇聚到同一个点。
相当于每个点和至多一个出边匹配且和至多一个入边匹配。
将 DAG 上每个点拆为入点和出点,构成二分图。若存在边 (𝑢,𝑣) 则从 𝑢 的出点向 𝑣 的入点连边。答案即为总点数 - 最大匹配。

Bonus:根据 Dilworth 定理,DAG 上的最小链覆盖 = 最长反链。(参考离散数学I)
DAG最小路径覆盖2
在有向无环图(DAG)上用若干条可相交的路径(可以包含一个点)来覆盖所有点,问最少用多少条路径?

将图 𝐺 通过 Floyd-Warshall 算法求出传递闭包 𝐺¡ä,转化为在 𝐺¡ä 上的最少不相交路径覆盖问题。
证明:对于 𝐺 的一个可相交路径覆盖方案,存在一个到 𝐺 中路径到 𝐺¡ä 中路径的映射,使得在 𝐺¡ä 中这些路径互不相交且仍覆盖所有点。

二分图博弈
给出一张二分图和起始点 𝐻,A 和 B 轮流操作,每次只能选与上个被选择的点(第一回合则是点 𝐻)相邻的点,且不能选择已选择过的点,无法选点的人输掉。问先手是否有必胜策略?

考虑二分图的最大匹配,如果最大匹配一定包含 𝑯,则先手必胜,否则先手必败。
(a) 如果最大匹配一定包含 𝐻,记该匹配为 𝑀,先手只需每次沿 𝑀 中的匹配边转移到匹配点,后手只能沿非匹配边转移。
假设最终后手操作后在一个非匹配点停止,记路径为 𝑃,则取  𝑀﷮′﷯=𝑀⊕𝑃,𝑀¡ä 也是最大匹配但是不包含 𝐻,矛盾。所以最后一定以先手操作后停止。
二分图博弈
(b) 如果最大匹配不一定包含 𝐻,取任意一个不包含 𝐻 的匹配 𝑀,则先手无论向哪个点转移,都一定会转移到匹配点。由于 𝐻 相邻的点一定在最大匹配中,此时对后手来说有必胜策略。

Q:如何判断二分图的最大匹配是否一定包含 𝐻?
对原图求最大匹配,再删去点 𝐻 后求最大匹配,比较两次最大匹配数是否相同。

我特地花很多时间准备了这些恰当的问题模型和详尽的证明。内容有点多了讲的时间超了不少。

刚到地方的时候 zxp 正在挑上一位同学 ppt 的毛病。卧槽这个每一段前面的“·”有没有也要管?

试讲完 zxp 告我你这是堆砌,没有一个突出的中心。

嫌我画图少,觉得我自己脑子里很清晰但是听者跟不上。

挑剔我某些概念用词和课上不一样,课上讲的“最小覆盖”你这个怎么用“最小点覆盖”啊。

知道我是竞赛生,有意无意地强调要让其他人没有竞赛背景的能听懂。

好吧,第一次习题课的时候从舍友那听说了 zxp 不喜欢竞赛生来讲习题课。

虽然很不爽,但主要问题我还是认了。

助教告我你应该有具体的情景引入,然后引到这些抽象的问题和定理。总之要讲个好故事。

行吧我理想中的习题课和老师理想中的相去甚远。

晚上不服气优化了两三个小时重做了一版 ppt,只讲二分图博弈问题(似乎助教只对这个部分比较感兴趣)。

发给助教后才知道自己早就没机会咯。

助教:……(省略一段意见)……我建议你下次上课时候,看一下其他同学的讲解,然后可以报名参加第三次习题课。

好气,我准备的这些就变成无用功了?!

其实试讲后被批评一顿我觉得没什么,我的内容确实有很大问题。但是你当时没有给出明确答复,甚至告诉我有很大改进空间,告我往什么什么方向改进。结果晚上我真的重做了一版后,才告诉我进不了第二轮试讲?助教提出的问题意见让我看不出他这是认真看过我的ppt的回复。

有种想和助教对线的冲动,不过助教也个是干苦力的,还是算了。

upd: 不是哥们,新雅书院的人上人就可以无视这些毛病了???

image

posted @ 2025-05-04 16:15  RenaMoe  阅读(74)  评论(2)    收藏  举报