跳转至

弦图

弦图是一种特殊的图,很多在一般图上的 NP-Hard 问题在弦图上都有优秀的线性时间复杂度算法。

一些定义与性质

子图:点集和边集均为原图点集和边集子集的图。

导出子图(诱导子图):点集为原图点集子集,边集为所有满足 两个端点均在选定点集中 的图。

:完全子图。

极大团:不是其他团子图的图。

最大团:点数最大的团。

团数:最大团的点数,记为 ω(G)

最小染色:用最少的颜色给点染色使得所有边连接的两点颜色不同。

色数:最小染色的颜色数,记为 χ(G)

最大独立集:最大的点集使得点集中任意两点都没有边直接相连。该集合的大小记为 α(G)

最小团覆盖:用最少的团覆盖所有的点。使用团的数量记为 κ(G)

:连接环中不相邻两点的边。

弦图:任意长度大于 3 的环都有一个弦的图称为弦图。

Lemma 1:团数 ω(G)χ(G) 色数

证明:考虑单独对最大团的导出子图进行染色,至少需要 ω(G) 种颜色。

Lemma 2:最大独立集数 α(G)κ(G) 最小团覆盖数

证明:每个团中至多选择一个点。

Lemma 3:弦图的任意导出子图一定是弦图。

证明:如果弦图有导出子图不是弦图,说明在这个导出子图上存在大于 3 的无弦环,则无论原图如何(怎么加边)都不会使得原图是弦图,矛盾。

Lemma 4:弦图的任意导出子图一定不可能是一个点数大于 3 的环。

证明:一个点数大于 3 的环不是弦图,用以上定理即可。

弦图的判定

问题描述

给定一个无向图,判断其是否为弦图。

点割集

对于图 G 上的两点 u,v,定义这两点间的 点割集 为满足删除这一集合后,u,v 两点之间不连通。如果关于 u,v 两点间的一个点割集的任意子集都不是点割集,则称这个点割集为 极小点割集

Lemma 5:图关于 u,v 的极小点割集将原图分成了若干个连通块,设包含 u 的连通块为 V1,包含 v 的连通块为 V2,则对于极小点割集上的任意一点 aN(a) 一定包含 V1V2 中的点。

证明:若 N(a) 只包含 V1V2 中的至多一个连通块中的点,从点割集中删去 a 点,仍不连通,则原点割集不是最小点割集。

Lemma 6:弦图上任意两点间的极小点割集的导出子图一定为一个团。

证明:极小点割集大小 1 时,导出子图一定为一个团。

否则,设极小点割集上有两点为 x,y,由 Lemma 5 得,N(x) 中有 V1,V2 中的点,设为 x1,x2,同样的,设 y1,y2,注意,可能有 x1=y1,x2=y2

由于 V1,V2 均为连通块,则在 x1,y1x2,y2 两个点对之间存在最短路径。设 x,yV1,V2 内部的最短路为 xx1y1y,xx2y2y,则图上存在一个环 xx1y1yy2x2x,该环的大小一定 4,根据弦图的定义,此时该环上一定存在一条弦。

若这条弦连接了 V1,V2 两个连通块,则点集不是点割集。若这条弦连接了单个连通块内部的两个点或一个连通块内部的一个点和一个点割集上的点,都不满足最短路的性质。所以这条弦只能连接 x,y 两点。

由此,可证弦图中每个极小点割集中的两点都有边直接相连,故性质得证。

单纯点

N(x) 表示与点 x 相邻的点集。若点集 {x}+N(x) 的导出子图为一个团,则称点 x 为单纯点。

Lemma 7:任何一个弦图都至少有一个单纯点,不是完全图的弦图至少有两个不相邻的单纯点。

证明:数学归纳法。单独考虑每一连通块。

归纳基底:当图与完全图同构时,图上任意一点都是单纯点。当图的点数 3 时,引理成立。

若图上的点数 4 且图不为完全图,可知必然存在 u,v 使得 (u,v)E。设 I 是图关于 u,v 的极小点割集。设 A,B 分别是删去 I 后的导出子图上 u,v 所在的连通块。由于问题的对称性,我们只考虑 A 一侧的情况,设 L=A+I。若 L 为完全图,则 u 为单纯点;若不是,因为 L 是原图的导出子图,一定也是弦图,所以有两个不相邻的单纯点,因为 I 是一个团,其上两点都相邻,所以 A 中一定有一个单纯点。该单纯点扩展到全图也为单纯点。

由于每次将整个图分成若干个连通块证明,大小一定减小,且都满足性质,故归纳成立。

完美消除序列

n=|V|,完美消除序列 v1,v2,,vn1,2,,n 的一个排列,满足 vi{vi,vi+1,,vn} 的导出子图中为单纯点。

Lemma 8:一个无向图是弦图当且仅当其有一个完全消除序列。

充分性:点数为 1 的弦图有完全消除序列。由 Lemma 3Lemma 7,点数为 n 的弦图的完美消除序列可以由点数为 n1 的弦图的完美消除序列加上一个单纯点得到。

必要性:假设有无向图存在结点数 >3 的环且拥有完美消除序列,设在完美消除序列中出现的第一个环上的点为 v,设 v 在环上与 v1,v2 相连,则有完美消除序列的性质即单纯点的定义可得 v1,v2 直接有边相连,矛盾。

朴素算法

每次找到一个 单纯点 v,加入到完美消除序列中。

将点 v 与其相邻的边从图上删除。

重复以上过程,若所有点都被删除,则原图是弦图且求得了一个完美消除序列;若图上不存在单纯点,则原图不是弦图。

时间复杂度 O(n4)

MCS 算法

最大势算法(Maximum Cardinality Search)是一种可以在 O(n+m) 的时间复杂度内求出无向图的完美消除序列的方法。

逆序给结点编号,即按从 n1 的顺序给点标号。

labelx 表示第 x 个点与多少个已经标号的点相邻,每次选择 label 值最大的未标号结点进行标号。

用链表维护对于每个 i,满足 labelx=ix

由于每条边对 i=1nlabeli 的贡献最多是 2,时间复杂度 O(n+m)

正确性证明

α(x)x 在这个序列中的位置。 我们需要证明对于任何一个弦图,算法求出的序列一定是一个完美消除序列,即在序列中位于某个点后面且与这个点相连的所有点两两相连。

Lemma 9:考虑三个点 u,v,w 满足 α(u)<α(v)<α(w),如果 uw 相连,vw 不相连,则 w 只给 ulabel 贡献,不给 v 贡献。为了让 vu 先加入序列,需要一个 x 满足 α(v)<α(x)vx 相连,ux 不相连,即 x 只给 v 贡献而不给 u 贡献。

Lemma 10:任意一个弦图一定不存在一个序列 v0,v1,,vk(k2) 满足下列性质:

  1. vivj 相连当且仅当 |ij|=1
  2. α(v0)>α(vi)(i[1,k])
  3. 存在 i[1,k1],满足 α(vi)<α(vi+1)<<α(vk)α(vi)<α(vi1)<<α(v1)<α(vk)<α(v0)

证明:

由于 α(v1)<α(vk)<α(v0),且 v1v0 相连,vkv0 不相连,所以由性质一,存在 x 满足 α(vk)<α(x)vkx 相连,v1x 不相连。

考虑最小的 j(1,k] 满足 vjx 相连,我们可以推出 v0x 不相连,否则 v0v1vjx 构成了一个长度 4 且无弦的环。

如果 $x