弦图学习笔记
1. 定义
弦(chord): 对于一个点数大于等于 4 的简单环,连接环上不相邻两点的边称作弦。
弦图: 对于无向图 \(G\),如果其每个点数大于等于 4 的简单环都存在至少一条弦,则称这个图是弦图。
这个定义等价于:图 \(G\) 的任何诱导子图不是 \(K\) 阶环(\(K \ge 4\))。
单纯点: 对于任意的无向图 \(G\),\(v\) 是单纯点 \(\iff\) \(N(v)\) 构成一个团。
完美消除序列(Perfect Emination Order, PEO): 对于 \(n\) 个点的图 \(G\),其点集的一个排列 \(v_1, v_2, \dots, v_n\) 被称为完美消除序列当且仅当对于任意的 \(v_i\),其在 \(v_i, v_{i+1}, \dots, v_n\) 构成的诱导子图中是单纯点。
点割集: 对于图 \(G\) 中不相邻的两个点 \(u, v\),\(A\) 是一个点割集当且仅当 \(V-A\) 的导出子图中 \(u, v\) 不连通。
2. 性质与定理
性质 1: 弦图的任意导出子图依然是弦图。
引理 1: 弦图中,\(u,v\) 的任意极小点割集 \(A\) 是一个团。
设删掉 \(A\) 后 \(u, v\) 所在的连通分量 CC 分别为 \(V_1, V_2\)。
显然 \(\forall x \in A\),\(N(x)\) 交 \(V_1\), \(V_2\),否则与极小的假设矛盾。
对于任意的 \(x, y \in A\),我们先在 \(V_1\) 中取 \(x_1, y_1\) 使其分别于 \(x,y\) 相邻,由上面知这样的点存在。
同理在 \(V_2\) 中取 \(x_2, y_2\)。
考虑由 \(x_1, y_1\) 在 \(V_1\) 中的最短路,以及 \(x_2,y_2\) 在 \(V_2\) 中的最短路和 \(x,y\) 构成的环。
由于是弦图,说明一定存在一条弦边。又因为是最短路,所以弦边只能是 \((x,y)\)!
所以对于任意的点都有连边,引理得证。
引理 2: 对于任意弦图一定存在至少一个单纯点,对于任意非完全图的弦图存在不相邻的两个单纯点。
归纳法,\(n=1\) 显然成立,现在假设 \(<n\) 的都成立。
如果不连通,由归纳假设得证,完全图也显然,所以假设是连通非完全图。
任取两个点 \(u,v\) 及其极小点割集 \(A\)。考虑两种情况。
第一种,\(V_1 \cup A\) 为团,\(v_1\) 任何点都是单纯点。
第二种,不为团,考虑到 \(A\) 是团,不可能有两个不相邻的单纯点。> 又因为归纳假设知道存在两个不相邻的单纯点,所以 \(V_1\) 一定有一个单纯点!
同理可得 \(V_2\) 也有一个单纯点,显然两个点不连通,得证。
定理 1: 图 \(G\) 是弦图 \(\iff\) 存在 PEO
根据引理 2 和性质 1,我们知道弦图肯定存在 PEO。
如果一个图不是弦图,存在环没有弦,这就导致最先访问的一个点肯定不是单纯点。
所以定理得证。
3. LEX-BFS 算法
我们考虑如何判定一个图是不是弦图,LEX-BFS 可以在 \(O(n + m)\) 的时间内求出一个弦图的 PEO,如果不是弦图得到的就不会是 PEO。
我们考虑 BFS 的本质:每次从未访问的点选一个,使其 pedecessor (邻居中已经被访问的节点)尽量靠前被访问,然后访问这个点。
我们做一些变化:如果 pedecessor 是同一个点,我们就比较第二靠前的 pedecessor 知道不一样。
具体的,我们倒序生成这个序列,然后对每个点存在一个 pedecessor,每次找到字典序最大的 访问。
考虑证明其一定是 PEO。
如果不是,说明存在 \(i\) 和 \(i_1\) 和 \(i_2\),使得 \((i, i_1), (i, i_2)\) 但没有 \((i_1, i_2)\)。
考虑到这个算法的过程,说明存在一个点 \(i_3\) 使得 \(i_3 > i_2\),且 \(i_3\) 在这三个点中只与 \(i_1\) 右边。
以此类推存在 \(i_4 > i_3\) 只与 \(i_2\) 右边。
注意这个过程可以无限进行,但是显然 PEO 不是无限的,矛盾!所以得知正确性。
最后,我们还需要判定一个图是不是弦图,这个可以从后往前,每次找到其后面的点中相邻的第一个点,只要判断他和其它点是否相邻即可,因为他和后面的点之前已经判断了。
这样整个算法就是 \(O(n+m)\) 的。
实现?想多了。
4. 应用
色数等于团数,最小团覆盖等于最大独立集,极大团数量是 \(O(n)\) 的都可以求出来。