【算法概论】FAS问题与顶点覆盖问题

来源:互联网 发布:淘宝网名昵称大全男 编辑:程序博客网 时间:2024/06/07 17:22

题目出自《算法概论》的第八章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 G=(V,E)  and a budget b , find a feedback arc set of <=b  edges, if one exists.
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 b , then G    contains a feedback arc set of size b .
(c) Show that if G    contains a feedback arc set of size b , then G  contains a vertex cover of size (at most) b .
G=(V,E)  has n  vertices v 1 ,...,v n  , then make G  =(V  ,E  )  a directed graph with 2n  vertices w 1 ,w 1   ,...,w n ,w n    , and n+2|E|  (directed) edges:

  • (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的解。
有如下验证:

  1. 判断|E  |<=b 
  2. 判断对于有向图G=(V,E) , GE    无环。判断一个有向图是否存在环的算法为:对每个未访问过的顶点做一个DFS(深度优先搜索),标记已经访问了的顶点,若一个正在访问的顶点为一条有向边的起点,一条已经访问了的顶点为该有向边的终点,则图G 有环。访问所有顶点后,若未判定图G 有环,则图G 无环。算法的时间复杂度为O(|E|+|V|) .

以上验证的方法可以在多项式时间内完成,因此FAS问题为NP问题。

(b) 证明如果G 包含一个顶点覆盖S , 其中|S|=b , 那么G   包含一个FAS(反馈弧集合),该集合的大小为b .
首先我们以一个简单的例子来观察G   的构造。
G 这里写图片描述
G   这里写图片描述

对于G 中的每个顶点v i  G   中对应着有向边<w i ,w i   > .
对于G 中的每对相连的两个顶点(v i ,v j ) G   中对应着有向边<w i ,w j   > <w j ,w i   > ,可以记这两条有向边为斜边

可以看到,w i ,i=1,2,...,n 的出度为1,w i   ,i=1,2,...,n 的入度为1.
并且若G 中的v i ,v j  两个顶点相连,则在G   中形成一个有向环:w i >w i   >w j >w j   >w i  .

G 包含一个大小为b 的顶点覆盖S 时,G   的大小为b 的FAS构造方式为:
FAS={<w i ,w i   >for every v i S} 
可以看到, |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 中的每条边(v i ,v j ) 都有一个顶点v i  或者v j  在顶点覆盖集S 中,(v i ,v j ) 对应着G   的有向环w i >w i   >w j >w j   >w i  . 若v i S , 图G   中以w i  w i    为端点的有向边不在环中;若v j S , 图G   中端点为w j  w j    的有向边不在环中。对于图G   中的每条斜边<w i   ,w j > ,在顶点覆盖集中有v i S v j S , 因此当FAS的构造方式为FAS={<w i ,w i   >for every v i S} 时,所有的<w i ,w j   > <w j ,w i   > 都不在有向环中(所有斜边都不在环中)。G  FAS 无有向环。

因此,如果G 包含一个大小为b 的顶点覆盖S , 那么G   包含一个大小为b 的FAS(反馈弧集合),得证。

(c) 证明假如G   有一个集合大小为b 的FAS,那么G 有一个大小不超过b 的顶点覆盖S 
在(b)中可以看到,如果G 包含一个大小为b 的顶点覆盖S ,那么G   包含一个大小为b 的FAS.
说明这里的FAS可能包含斜边以外的边,即<w i ,w i   > 类型的有向边。

对于图G 任意一条边e=(v i ,v j ) ,其对应G   中的一个有向环:w i >w j   >w j >w i   >w i  ,该有向环由四条有向边<w i ,w i   >,<w i   ,w j >,<w j ,w j   >,<w j   ,w i >  构成。
要使得GFAS 中无环,则<w i ,w i   >,<w i   ,w j >,<w j ,w j   >,<w j   ,w i > 至少有一条边属于FAS,该条边的其中一个端点为w i  w j  

因此,顶点覆盖集S 的构造方式为:
初始化S 为空集
对FAS中的每一条边(每一条边都形如<w i ,w i   ><w i   ,w j ><w j ,w j   ><w j   ,w i > 

  1. 若这条边有一个端点为w i  , 则将v i  加入到顶点覆盖集S 中;
  2. 若这条边有一个端点为w j  , 则将v j  加入到顶点覆盖集S 中。

条件1和条件2至少满足一条,若同时满足两条规则,那么任选一条执行。

该构造方式显然有|S|<=b ,并且任意一条边e=(v i ,v j ) 都有一个顶点在顶点覆盖集S 中。命题c得证。

1 0