题目出自《算法概论》的第八章8.22
问题描述:
Given a directed graph G=(V,E) , a subset E ′ ∈E is called a feedback arc set if the removal of edges E ′ renders G acyclic.
FEEDBACK ARC SET(FAS): Given a directed graph
FAS can be shown to be NP-complete by a reduction from VERTEX COVER.
(a) Show that FAS is in NP.
(b) Show that if G contains a vertex cover of size
(c) Show that if
- (w i ,w i ′ ) for all 1,2,...,n .
- (w i ,w j ′ ) and (w j ,w i ′ ) for every (v i ,v j )∈E .
值得注意的是,G 为无向图,G ′ 为有向图。
问题解析:
(a) 问题a需要证明FAS是一个NP问题。首先介绍一下P问题,NP问题,以及NP完全问题(NPC, NP - Complete).
- P问题(Polynomial Problem)即可以在多项式时间内解决的问题。
- NP问题(Non-deterministic Polynomial Problem), 即不确定是否能在多项式时间内解决,但可以在多项式时间内验证一个解的问题。
- NPC问题:如果所有的NP问题能够在多项式时间内规约为某个NP问题,那么这个NP问题被称为NPC问题。
我们不确定FAS问题是否能在多项式时间内得到一个解,需要证明在多项式时间内验证一个解E ′ 是否是FAS的解。
有如下验证:
- 判断|E ′ |<=b
- 判断对于有向图G=(V,E) , G−E ′ 无环。判断一个有向图是否存在环的算法为:对每个未访问过的顶点做一个DFS(深度优先搜索),标记已经访问了的顶点,若一个正在访问的顶点为一条有向边的起点,一条已经访问了的顶点为该有向边的终点,则图G 有环。访问所有顶点后,若未判定图
G 有环,则图G 无环。算法的时间复杂度为O(|E|+|V|) .
以上验证的方法可以在多项式时间内完成,因此FAS问题为NP问题。
(b) 证明如果G 包含一个顶点覆盖
首先我们以一个简单的例子来观察
图G :
图
对于G 中的每个顶点
对于G 中的每对相连的两个顶点
可以看到,w i ,i=1,2,...,n 的出度为1,w i ′ ,i=1,2,...,n 的入度为1.
并且若G 中的
当G 包含一个大小为
可以看到, |FAS|=|S|=b .
对于每个v i ∈S ′ , <w i ,w i ′ >∈FAS ,得到一个新图U ′ =G ′ −<w i ,w i ′ > . 图U ′ 中,由于w i 的出度变为0,因此以w i 为端点的边不会在任意一个有向环中。同理,由于w i ′ 的入度变为0,以w i ′ 为端点的边也不会在任意一个有向环中。
由于G 中的每条边
因此,如果G 包含一个大小为
(c) 证明假如
在(b)中可以看到,如果G 包含一个大小为
说明这里的FAS可能包含斜边以外的边,即
对于图G 中任意一条边
要使得G−FAS 中无环,则<w i ,w i ′ >,<w i ′ ,w j >,<w j ,w j ′ >,<w j ′ ,w i > 中至少有一条边属于FAS,该条边的其中一个端点为w i 或w j 。
因此,顶点覆盖集S 的构造方式为:
初始化
对FAS中的每一条边(每一条边都形如<w i ,w i ′ >或<w i ′ ,w j >或<w j ,w j ′ >或<w j ′ ,w i > )
- 若这条边有一个端点为w i , 则将v i 加入到顶点覆盖集S 中;
- 若这条边有一个端点为
w j , 则将v j 加入到顶点覆盖集S 中。
条件1和条件2至少满足一条,若同时满足两条规则,那么任选一条执行。
该构造方式显然有