反馈顶点集问题简介
- 现有问题如下:给定一个无向图G,很不幸的是,G中可能存在圈,这让你很不满意。现在需要找到一个顶点集合F,使得把这些顶点移除后,图G中就没有圈了。
- 另一件不幸的事,本文我们还不会给出这个问题的求解算法,因为关于这个问题要引入的概念较多,我们先讲清楚问题,把问题剖析一下,发掘一些性质。
- 反馈顶点集问题有很多实际用途,比如操作系统中发生死锁,我们就要打破圈,怎么才能以最小代价来打破圈?
- 说明:本文中环与圈含义相同,可能有时候会混用。
圈的表示
这里用到了伽罗瓦域 G F [ 2 ] m GF[2]^m GF[2]m,但是只是很简单的使用,不涉及复杂的近世代数理论。假设我们的图G中一共有m条边,然后给定一些边,我们就可以把它映射到一个m维向量上,边存在就让那个维度为1,不存在就为0,可能表述不当,下面是个例子:
那么按照这个方法,也能把一个圈映射到一个向量上:
简单圈
简单环:简单环又称简单回路,图的顶点序列中,除了第一个顶点和最后一个顶点相同外,其余顶点不重复出现的回路叫简单回路。或者说,若通路或回路不重复地包含相同的边,则它是简单的
圈的运算
既然映射到伽罗瓦域上,必有其道理,在伽罗瓦域上做两个圈的加法,结果就像两个泡泡合并成一个大泡泡,咱们还是看个例子:
对应到伽罗瓦域上的运算就是(加减法都是按位异或):
(1,1,0,0,1)+(0,0,1,1,1)=(1,1,1,1,0)
圈空间
可能你已经注意到了,圈并不能填满整个伽罗瓦域,所有的圈只能构成一个子空间。在给定的加法(异或)运算下,圈构成了一个线性空间,我们把图G中圈空间的维度记为cyc(G),原书作者说它也等于简单圈空间中的特征向量的个数,也就是说简单圈就能生成整个圈空间,这也很显然,复杂圈给自己打结的地方都断开就成一些简单圈了。
到目前为止,大家抽象地想象一下有一个圈构成的线性空间就可以了,没有必要真正地去分析这样一个空间,重要的是下面这个定理。
我们定义κ(G)为图G=(V,E)中连通分量的数目,下面给出一个重要定理:
c y c ( G ) = ∣ E ∣ − ∣ V ∣ + κ ( G ) cyc(G) = |E|−|V| + κ(G) cyc(G)=∣E∣−∣V∣+κ(G)
证明:
不失一般性,我们可以设G是一个连通图,从而证明cyc(G)=|E|−|V|+1,如果得证,对每个联通分支求和就能得到上式。下面我们通过两个不等式来证明定理。
1. 证明 c y c ( G ) ≥ ∣ E ∣ − ∣ V ∣ + 1 cyc(G) \geq |E|−|V|+1 cyc(G)≥∣E∣−∣V∣+1
G是一个连通图,任取T是G上的一个生成树,我们定义T-基础圈为一条非树边和树边构成的简单圈(在生成树的基础上任意再引入一条非树边都会得到一个简单圈)所以我们一共能得到|E|-|V|+1个T-基础圈(树边有|V|-1个),并且这些圈是线性无关的(很显然,因为他们都独占一个非树边),既然都是圈,那么它们一定是G上整个圈空间的子集,他们也一定生成了一个子空间,因此cyc(G) ≥ |E|−|V|+1
2. 证明 c y c ( G ) ≤ ∣ E ∣ − ∣ V ∣ + 1 cyc(G) \leq |E|−|V|+1 cyc(G)≤∣E∣−∣V∣+1
首先说明一个事实:对于生成树T,每条树边t都能对应一个仅仅包含这一条树边和其它一些非树边的割(也可以对应多个,只要树边唯一确定即可)。这个可以想想到,一个割只需要和一条树边相交就能把树切断,且树把图划分成的区域都是与外界相连的。既然每个割都是有一个独占的树边,那他们之间就是线性无关的,所以用割边就能生成一个|V|-1维割空间,我们还是看个图感受一下。
其次,我们想说明,割和圈会相交偶数次(指在边上相交偶数次),试想拿到切一个图,图中有一个圈,要么不切到圈,要么切到圈也会进去一刀出去一刀,放一张丑图,大家凑合看看:
然后原书作者告诉你:显然圈和这些割是正交的!没错,因为相交处有偶数处,异或就没了,而不相交处相乘等于零。于是得到结论:割空间和圈空间不相交,也就是割空间是圈空间的正交补空间的子集,或者圈空间是割空间的正交补空间的子集:
换成公式表达,就是: c y c ( G ) ≤ ∣ E ∣ − ∣ V ∣ + 1 cyc(G) ≤ |E|−|V| + 1 cyc(G)≤∣E∣−∣V∣+1
整合:
因此我们得到了对于一般无向连通图G: c y c ( G ) = ∣ E ∣ − ∣ V ∣ + 1 cyc(G) = |E|−|V| + 1 cyc(G)=∣E∣−∣V∣+1,实属不易大家要牢记结论。
顶点对圈维度的贡献
去掉一个顶点,圈空间的维度必然会有所降低,这个减少量记为 δ G ( v ) \delta_G(v) δG(v),如下图,这里不严格论证,但是大家不难想象其圈空间,就只有三个圈而已:
其中 δ G ( v 1 ) = 2 \delta_G(v1)=2 δG(v1)=2, δ G ( v 2 ) = 1