「区间二分图」贪心匹配的正确性
U 群里一位群友(其实他是我学长)提出的问题,我觉得很有趣的,记录下来。证明的记号用的比较「口语化」。
上图该出了一个算法,我们要证明这一算法确实给出了图中所示二分图的一个最大匹配。
Proof:我们用该算法构造一个大小相同的点覆盖,再由 König 定理即可证明最优性。
设那些个区间在 中,单点在 中。为了fangbianqijian
维护一个集合 ,初始时 。
在第 步循环中:
- 如果 点可以找到对应的 left most 的顶点,记为 ,则令 。
- 如果不行,则对 这一个区间里的每个点 ,在 中找到点 ,使得 。然后 (对每个 都弄一次,如果这个 之前就变成 了,则不需要做这个操作,不妨把这个操作成为「把 换下来」)。
我们证明这一循环不变式:在第 步循环结束后, 覆盖了 这些个边。
-
第一个 case 显然。
-
第二个 case:显然 被覆盖了(因为里面的每个点都被加上去了)。而对于 之前的 ,我们再用一次归纳法:在 这些个点全部被换上来后,还是有: 是被覆盖的:
-
如果 之前就在上面,而且也没被换下来,则这个是显然成立的。
注意这一部分是不需要归纳奠基的。
-
如果 之前就被换下来了,则在这之前 就被填满了。
而「换下来」的操作只会增加 中属于 的点,所以 仍然是被填满的。
注意这一部分也是不需要归纳奠基的。
-
如果 就是在这一步被换下来的,于是 ,我们考虑 这里面的边:
-
在 这之间的边肯定被之前的点覆盖(不然 不会选择 )。
「被之前的点覆盖」这里的推理如下:
-
如果 ,则 。又因为 ,所以 ,把 覆盖了也就把 覆盖了。
-
如果 ,则这里用一下归纳奠基。归纳到 的时候, 都被覆盖了,和算法执行前 步的效果是一样的,所以可以说「被之前的点覆盖」。
-
-
在 中的边自然被覆盖。
-
而因为 ,所以没有更右边的边了。
综上这些个边全部被覆盖了。
-
-
归纳完成。